问题标签 [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.

0 投票
0 回答
274 浏览

assembly - 获取 16 位字的低位和高位部分

学习SDCC编译器,它的Z80部分(sdasz80)。在本机版本的汇编程序中,我使用:

将 16 位值存储BUF在两个 8 位部分(高位和低位)中。我在 SDCC 中找不到怎么做,看来这个

编译没有错误,生成的代码是正确的,但是第二次加载对我来说看起来不太好,并且编译器不接受用于排序逻辑操作的括号。是否正确,并且是实现将 16 位值拆分为 2 个字节的唯一方法?

更新。可在一些 ASxxx手册 ><操作员中找到(见表 4)。不要给出编译错误“错误:机器特定寻址或寻址模式错误”。

更新1:以下代码

给出一个错误Error: <q> missing or improper operators, terminators, or delimiters

0 投票
0 回答
490 浏览

embedded - I2C 无法启动

我正在使用 stm8s 控制器和 SDCC 编译器。我正在将基于 SD130S7 I 2 C 的 RTC 与控制器连接。我在沟通过程中遇到问题。我觉得问题是我2C本身没有启动。

我正在使用 STM8S103 的开发板。

我检查了逻辑分析仪,发现 SDA 引脚上只有一个脉冲。

我很困惑为什么 SDA 有脉搏而 SCL 没有。(因为 SCL 是时钟,时钟应该首先出现)。

0 投票
1 回答
771 浏览

c - 如何在 sdcc 内联汇编中推送变量?

我有这个代码ThreadCreate()

这导致:

我不明白为什么。tmpPSW定义明确,但 sdcc 抱怨。我在这里做错了什么?还有其他方法可以在 sdcc 内联汇编中推送 C 变量吗?

这也可能是相关的。生成的.asm文件包含分配信息:

这是否意味着我的寄存器用完了?如果是这样,我应该如何减轻这种情况?


编辑:

来源ThreadCreate()

生成的程序集ThreadCreate()

0 投票
0 回答
97 浏览

c - SDCC 可以覆盖运营商吗?

我一直在尝试使用 SDCC 编译极其轻量级的 C 程序以在 TI83 计算器上运行(是的,你可以这样做)。作为一个旧计算器,它没有太多的 RAM 来存储程序,而且处理器非常慢。我编写的代码类似于*((char*)(x/8)) |= 0x80>>(x&7)一个简单的例程来打开 x 是有符号字符的单个位。问题是,SDCC 实现了将所有内容向上转换为 16 位整数的 C 标准,这增加了一层复杂性,然后它错过了 x/8 可以通过位移来实现的事实,并实现了整个内联除法算法。

我的问题是:我可以重新定义算术运算符以避免在可能的情况下向上转换吗?也许其次,我可以定义一次除法操作,然后多次调用它以避免大量文件吗?

编辑: 我意识到我的代码引起的很多问题都存在于相关变量的类型中,因为只有无符号除法才能进行这种优化。重新定义操作员并将操作转移到单独的单一位置的问题仍然存在。

0 投票
1 回答
499 浏览

compilation - 如何在指针中处理 8051 XDATA 内存空间?

我正在为包含 8051 内核的 Cypress EZ-USB FX2LP 进行开发,并且我使用 SDCC 进行编译。

我注意到我可以(有时?)省略__xdata指针注释,即使使用指向 XDATA 区域的指针,我的固件仍然可以正常运行。

例如,它将使用以下声明编译和执行:

代替

据我了解,XDATA 是 16 位可寻址的,而 DATA 是 8 位可寻址的。当 SDCC 编译器可以指向 XDATA 时,它们是否会自动将指针提升为 16 位?

0 投票
3 回答
901 浏览

c - 浮点数及其对 8 位微控制器内存的影响

我目前正在开发一个项目,该项目包括在 stm-8 微控制器上使用 linux 中的 SDCC 编译器进行裸机编程。芯片中的内存非常低,所以我试图保持精简。我已经使用了 8 位和 16 位变量,一切都很顺利。但最近我遇到了一个问题,我真的需要一个浮点变量。因此,我编写了一个函数,该函数将 16 位值转换为浮点数,并执行我需要的数学运算并返回一个 8 位数字。这导致我在 MCU 上的最终编译代码从 1198 字节变为 3462 字节。现在我明白了使用浮点是内存密集型的,并且可能需要调用许多函数来处理浮点数的使用,但是将程序的大小增加这么多似乎很疯狂。

规格:MCU stm8151f2 编译器:带有 --opt_code_size 选项的 SDCC

0 投票
1 回答
138 浏览

c - STM8L051F3 GPIO 初始配置

我正在为一个简单的应用程序编写 STM8L051F3 处理器,其中只需要控制所有 GPIO。

问题是我无法控制 GPIOC 引脚 0。

我刚刚配置了 GPIO 寄存器。是否需要其他启动?

我还尝试在 Ubuntu 上使用 stm8cubemx。我发现没用的软件,因为它生成的 ioc8 文件没有关于如何在 Ubuntu 中使用它的信息。

终端命令。

编译 sdcc -lstm8 -mstm8 --opt-code-size --std-sdcc99 --nogcse --all-callee-saves --debug --verbose --stack-auto --fverbose-asm --float-reent - -no-peep -I./ -I./STM8S_StdPeriph_Driver/inc -D STM8L051 ./main.c

Prog stm8flash -c stlinkv2 -p stm8l051f3 -s flash -w main.ihx

0 投票
1 回答
945 浏览

c - 带有c语言的mcu 8051 ide sdcc编译器无法编译

我在使用 c 语言时遇到 MCU 8051 IDE 模拟器的问题,但是在我将 sdcc 编译器安装到我的电脑后但在我编写了 ac 程序并编译它之后,它会出现消息“没有 sdcc 编译器”。然后它来了这个消息

"sdcc -mmcs51 --iram-size 256 --xram-size 0 --code-size 8192 --nooverlay --compile-only --noinduction --std-sdcc89 --model-small "task1.1cpro.c" task1.1cpro.c:6:警告 94:由于数据类型范围有限,比较始终为真

找不到“task1.cdb”| +-- 很可能表明您已禁用调试开关,如果不是您想要的,请转到 [Main Menu] --> [Configure] --> [Compiler configuration] --> [C language] - -> [General] 并启用“--debug”编译器开关。"

怎么回事我找不到解决这个问题的任何建议............

0 投票
1 回答
297 浏览

arrays - 如何使用 SDCC 创建位域的打包数组?

我有一个包含位字段数组的嵌套数据结构,我需要使用 SDCC 为 MCS-51 目标编译这些位字段。

这是一个简化的例子:

example.c

由于struct data包含 3 位,8 个实例总共包含 24 位,因此 3 字节的内存足以存储它们。

但是 SDCC 分配了 8 个字节,我们可以在结果中看到example.asm

有没有办法让 SDCC 只分配 3 个字节dummy

作为一种解决方法,我目前根本不使用 a struct,而是使用一些宏来计算数据结构的总大小,分配一个平面字节数组,并生成索引和位掩码以访问各个成员。我想改用类似的语法dummy[5].b

一些编译器似乎有启用位域打包的选项(如#pragma pack),但我在 SDCC 手册中没有找到类似的内容。

0 投票
2 回答
79 浏览

c - 为什么在声明之前没有主体调用此函数,“2”到底在做什么?

我正在调整一些代码以在 PIC18F47Q10 上以从模式运行 I2C。
该代码是为另一个类似的 PIC 编写的,但它确实需要一些调整。
这是原始代码:https ://github.com/texane/pic18f_i2c

在被定义之前我不明白这个电话,我也不明白'2'是什么意思。
这是来自int.c原始发布的文件。任何帮助或解释表示赞赏。
现在我正在评论所有这些,并希望没有它也能正常工作。

看到的错误是: