问题标签 [sdcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
crc - 启用 CRC 时 NRF24L01+ 无法接收
我有两个 STM8s105 MCU 和两个 NRF24L01+ 模块。设置一个为发件人:
一个作为接收器,启用 8 位 CRC 并禁用 ESB:
接收方无法接收任何数据包。
但是当 CRC 被禁用时,它工作正常:
请帮助我,谢谢!
顺便说一句,我有一个带有集成 NRF24L01+ 模块的 STC89C52 MCU 板。该板(启用CRC)可以毫无问题地接收数据包。所以,我确定问题出在接收端。
顺便说一句 2,我使用 sdcc 3.4.0、stm8flash 和 STM8S_StdPeriph_Driver
sdcc - SDCC 有效设备列表中缺少设备
在我的旧系统发生故障后,我正在重建一个 sdcc 编译器。我已经能够在 pic18F4410 上进行构建,但我的新设置未将其包含在其有效设备列表中。它调用有效的设备列表看起来非常小。
我不确定这个设备列表是从哪里得到的。我之前曾经工作过一次(使用那个确切的编译行),所以我确定解决方案就在某个地方......
我想用几乎所有受支持的 PIC18 设备更新该列表。
SDCC 版本:SDCC:mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.5.6 #1249(2015 年 9 月 2 日)(UNIX)
c - 为什么这句话消除了“未引用的函数参数警告”?
在 SDCC 编译器用户指南中,我阅读了以下内容:
我不明白这句话是什么"c; // to avoid warning: unreferenced function argument"
意思,是SDCC的特殊用法吗?还是C语言的特殊用法?
c - 如何在宏中转义 #
我需要编写一个需要内联汇编的宏
# 但是没有编译。我尝试将它作为参数传递,但这也不起作用。它说无效的预处理器令牌。我可以尝试使用内联函数,但无法动态创建寄存器名称。那就是我无权访问 name 变量。有没有人对如何在宏中使用 # 操作有任何建议。
我看过在#define 宏中转义# 符号?,但我已经清楚地解释了为什么我需要这里的宏。我的用例不同。
makefile - 使用 make 对每个源文件执行操作
我已经创建了一个像这样的 Makefile
问题是,sdcc
一次只能编译一个源。所以我需要对我在SRCS
变量中定义的每个源执行类似 foreach 的操作。如何在 gnu-make 中做到这一点?
c - 即使源和编译器标志未修改,是什么导致目标文件在编译之间发生变化?
如果您因为认为这不可能而单击它,那么在遇到它之前,我一直在想同样的事情。
我正在做一个项目,用 C 语言为 PIC 编写,它是用 Makefile 构建的。Makefile 非常杂乱无章,所以我想清理它。为了确保在执行此操作时没有破坏任何内容,我在新制作后记录了所有文件的哈希值:(此项目中没有子目录。使用 SDCC 和 GPUTILS 构建。)
然后我修改了 Makefile 并再次尝试,这次将生成的文件与allsums.txt进行比较。
有趣的是,.o 文件的哈希值不匹配,但最终结果匹配。假设问题是我以某种方式创造的,我花了很多时间试图找到它。
然后,凭直觉,我使用原始 Makefile 做到了这一点:
我发现这里的目标文件也发生了变化!一些搜索使我想到了这个问题,这证实了(至少对于 gcc).o 文件在每次编译之间都会发生变化。
这是什么原因造成的?
c - 如何处理“处理器不匹配”警告而不使它们静音或包含自定义构建的依赖项副本?
我有一个我用 SDCC 3.6.3 和 gputils 1.5.0 构建的 PIC 的 C 项目,这两个都是我从源代码构建的。
链接我的项目时,我从 gplink 收到以下错误消息:
有一个特定的标志可以消除这些警告(-w),但我不喜欢在构建项目时出现任何警告。一些搜索使我从 2007 年开始的简短对话解决了这个问题:SDCC 中包含的库将默认为 PIC 18f452 构建。我的项目使用 18f26k22,导致这些警告。
上述对话包括有关如何为不同目标重建 pic16 库的说明。它们已经过时了,但我通过阅读配置脚本弄清楚了。我按照以下步骤重新编译库:
修改文件
/li>device/lib/pic16/configure
。请注意,您还可以在 shell 中指定 ARCH 环境变量,如上述链接所述。(ARCH=18f26k22 make
)- 运行刚刚修改的配置文件:
./configure
make clean
make
- 上一级到 lib 目录:
cd ..
- 删除旧版本(如果存在):
rm -rf build/pic16
make
如果您使用非自由代码,您可能需要重复此操作。它住在device/non-free/lib/pic16
.
构建完成后,您可以更改 gplink 参数,以便 -I 标志指向包含您刚刚构建的库的构建目录。前任:-I/home/username/sdcc/device/lib/build/pic16 -I/home/username/sdcc/device/non-free/lib/build/pic16
不幸的是,gplink 使用了它找到的第一个库。这意味着您不能为您使用的每张图片构建库,将它们全部保存在不同的路径中,并且每个路径都有一个 -I 路径。gplink 将选择第一个并使用它,即使在其他 -I 路径中有其他版本不会产生处理器不匹配错误。
此外,make install
如果您针对多个芯片进行开发,那么运行将针对特定芯片构建的库复制到 /usr/local/sdcc 也无济于事。
除了包含我的项目所需的所有内容的自定义构建副本或使用 -w 标志之外,是否有更简洁的方法来处理此问题?
java - 如何使用java编程在终端上写
我正在使用 SDCC 设计编译器 IDE(使用 SDCC 我们可以为 8051 和 PIC 控制器编译代码)。要编译为 8051 编写的代码,我们使用命令sdcc --debug filename.c
并进入调试器,我们使用命令sdcdb filename.cdb
。断点只能在调试器中设置。在命令提示符下,我可以使用设置断点,break <linenumber>
但如何使用 IDE 来实现呢?当我使用 IDE 时,我不想通过键入命令来设置断点,但我想在按钮中实现此功能。我使用 Java Swing 设计了 IDE。
sdcc - 在 ASM 中为 SDCC/LCC 编译字符串文字
我正在尝试在 ASM 中为 GBDK 的 LCC 编写字符串文字。我可以编写每个单独的字符并且编译器工作正常。
但是,当我尝试将字符组合成一个字符串以使其更具可读性时:
我得到一个编译错误:
有没有办法解决这个问题?
版本信息
compatibility - `_naked`:尝试使用 SDCC 编译旧版 8051 (FX2) 代码,较新版本出现问题
我有用于与其他版本的 SDCC 一起编译的嵌入式 8051 内核(在 cypress FX2 中)的旧代码。但是,当前的 SDCC 不知道_naked
限定符:
由触发
和其他事件。
实际上应该告诉 C 编译器“不,忽略您_naked
是 C 编译器并了解您需要保存帧上下文的事实”,我觉得我不应该#define
将其删除。
有什么解决办法吗?我应该继续并在使用_naked
函数的地方手动内联汇编程序吗?我觉得我会在CALL
那里背叛编译器,这会改变时间。