问题标签 [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 投票
1 回答
1688 浏览

makefile - 无法在 debian 上使用 SDCC 为 pic 编译简单代码

我正在尝试使用 SDCC 在 Debian 中仅使用 VIM 和 Makefile 编译以下代码:

是的,就这么简单,它还没有工作。我正在使用这样的 Makefile:

完成所有这些之后,运行 makefile 后的输出是:

我尝试了更复杂的代码,结果相同,我看不出有什么问题,有人吗?

0 投票
0 回答
291 浏览

python - QProcess 在输入特定命令后停止通信

我想做什么?

我正在尝试构建一个 Python Qt Gui,它可以让我轻松地为微控制器运行/调试嵌入式程序。作为编译器,我使用的是 sdcc。Sdcc 还包含一个模拟器。

在代码中,我启动了一个子 QProcess,它将运行微控制器仿真器 ( s51)。

在模拟器中,模拟从输入 r + RETURN ( "r\n") 开始。

按 RETURN ( ) 可以随时停止模拟"\n"

我的问题

我的问题是我的代码无法到达第二个 RETURN。换句话说,模拟无限期地继续。一种或另一种方式,子进程永远不会收到第二个 RETURN。

重现步骤

  1. 安装 Python、PyQt 和 sdcc。
  2. 将下面的代码复制/粘贴到一个 emtpy 文件中并运行它。
  3. 最终更改 s51 可执行文件的路径。
  4. 单击“开始”按钮。
  5. 在下面的 Input 中输入r,然后按 Return 键。现在应该开始模拟。
  6. 当您再次按下 Return 键时,模拟应该会停止。但事实并非如此。

笔记:

  • 我已经在 Fedora Linux 上编写了代码。如果您正在运行 Ubuntu,则可能必须将可执行文件的路径更改为/usr/bin/s51(我不确定确切的路径)。

  • 该代码在其他一些控制台应用程序(如 bash、python、ifconfig、echo、gcc、...

  • 我相信这个问题与 sdcc 在阅读“r\n”命令(使用 strace 找到)后立即执行 ioct 有关: ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0

  • EDIT1:我正在运行 Qt 4.8.3

  • EDIT2:简化并修复了代码+添加了屏幕截图

截屏

模拟应该在第二次 RETURN 后停止。

(我输入了h run\n, run\n, \n, \n, \help截图可以在这里找到(声望不够)

简单控制台.py

0 投票
2 回答
3727 浏览

c - sdcc 内联 asm() 不工作

我在 Eclipse IDE 中使用GCC(更正)SDCC 来为 8051 架构嵌入式目标编译 C 代码。我需要插入一些 NOP 进行计时,而且我无法让编译器接受内联汇编代码。

使用__asm__ ("; This is a comment\nlabel:\n\tnop");(如下所示)或变体,我收到警告 112: function '__asm__' implicit declaration然后错误 101: too many parameters,就好像我正在尝试调用未声明的函数一样。我也尝试了SDCC 手册第 3.14 节中的所有其他选项。__asm ... __endasm给出一个语法错误__asm,与单个下划线相同,并且空格、换行符或同一行的组合没有帮助。

如果我将 Makefile 中的命令行正确拼凑在一起(没有#include 路径),SDCC 命令行上的 CFLAGS 为:

-Wp,-MD,$(@:%.rel=%.d),-MT,$@,-MP --disable-warning 110 -Wa,-p --model-medium

0 投票
1 回答
694 浏览

c - 错误 98:与属性“类型”的 x 先前定义冲突

我在使用 SDCC 并编程旧的 8051 时遇到此编译错误。我正在尝试使 1wire 搜索命令工作。我得到了一个 OneWire 库,我开始为我的硬件/软件进行修改,现在我陷入了这个错误:

错误出现的行如下。

以防万一,OW_info 的声明

我正在对上面的功能进行原型设计

我找不到出现编译错误的正确原因。我希望得到一些提示,为什么它会出现在那里。谢谢。

以及下载我的整个代码的链接http://www.upload.ee/files/4489287/test3.txt.html

0 投票
1 回答
117 浏览

pic - SDCC 整数比较意外行为

我正在尝试使用 PIC18F24J10 开始一个项目。尝试为此使用 SDCC。在这一点上,我已经将我的代码简化为只是试图确定正在发生的事情,因为我已经看到了一段时间的奇怪行为并且在我弄清楚发生了什么之前无法真正继续。不确定这是否是我目前唯一的问题,但我不知道为什么会这样。定时器中断触发,加上#defined for 循环会导致 PORTC 上的 LED 每秒闪烁两次。如果我只是做一个 PORTC=0xFF 和 PORTC=0 这工作正常。但是当我试图超越这一点时,它变得很奇怪。

在上面的代码中,四个 LED 应该闪烁,而其他四个保持亮起。相反,LED 以 10101010 模式保持亮起,该模式发生在“else”块中,当使用 HI 或 LO 以外的任何值调用“why”时应该发生这种情况。我从来没有用其他任何东西来调用它,那么为什么它会达到那个呢?

更新 - 进一步减少,不再有中断或未指定的包含/定义。这现在是整个程序,我仍然看到相同的行为。将模式从 10101010 更改为 10101011,以便我可以验证芯片实际上是否正在使用新代码进行编程,而且看起来确实如此。

0 投票
1 回答
530 浏览

macos - 如何在 OS X 中将程序上传到 STC 51

我使用 Arduino IDE 对 Arduino 进行编程。但是现在我有一个带有STC(51)的开发板。我不知道如何在 OSX 中对其进行编程。我发现 Windows 中有很多 GUI 工具,但很难找到一些适用于 OSX 的工具。

我发现了一些关于它需要安装“sdcc”的信息。但看起来它无法进行任何上传。

我是一名网络开发人员,使用命令行很好。但我基本上不知道我需要什么工具来完成这项任务。最好向我展示如何使用这些工具的示例。

顺便说一句:我不想使用 VM 来运行 Windows。而且我喜欢在 Sublime 中编码而不是其他 IDE。

编辑:

谢谢 baf 给我有关stcdude的信息。但我无法让它工作。

我在 stcdude 的问题中找到了另一个stcgal。但现在对我不起作用。

到目前为止,我可以使用sdcc编译代码并使用srecord将 ihx 转换为 bin。但我必须通过官方的 Win GUI 工具上传它。

BTW:虽然我是中国人,看过很多不好的中文网站,但我对STC的官方网站和他们的文件感到震惊。感谢那些仍然为我们编写开源工具的人。

我发现这个http://www.stcisp.com/mcuisp_stc15f_code_c.html我认为它会很有用。

0 投票
1 回答
829 浏览

makefile - 用于 8051 微控制器的 sdcc Makefile

嘿,有没有人与 SDCC 合作在 Macbook 上为 8051 微控制器系列制作项目。如果是,那么您能否发布工作制作文件,特别是在设备中加载程序的部分。我对 Makefile 中的程序标签具体写什么感到困惑。

0 投票
1 回答
260 浏览

c - 在 GBDK C 项目中包含静态库 (GBExtended)

我想在我的游戏中使用GBExtended 库,但我很难理解如何包含该库。

我可以看到 GBExtended 库(至少来自 loderunner 示例源)包含目录includes/lib/并且src/我需要包含的文件是lib/gbext.lib.

我假设您必须根据需要在文件中包含该库:

您必须将哪些标志传递给lcc编译器才能包含这些库?我无法从示例中识别出这一点。

0 投票
3 回答
1254 浏览

c - 简单的 C 程序返回太多参数错误

所以我刚刚开始学习 C,在使用 SmallDevice C 编译器设置 CodeBlocks 之后,我开始研究我正在学习的书中的一些程序。它不断返回此错误。这是代码:

它给我的错误是

我去找了一个写成完全相同的文本(它给了我完全相同的代码),当我把它放进去时仍然给我这个错误。这是我的编译器的问题吗?

0 投票
1 回答
368 浏览

svn - 从 svn 存储库安装特定版本

我正在尝试安装 SDCC 的特定修订版 (9092)(当然是在 Ubuntu 上),当我运行以下命令时,我收到此错误:

顺便说一句,我在终端上运行以下命令来安装它:

我正在按照此链接中给出的说明进行操作。有人可以帮我安装这个吗,拜托!

另外,我如何在 Ubuntu 存储库中查看 SDCC 的修订号?是否有任何手动方法可以从该链接(svn.code.sf.net/p/sdcc/code/trunk/sdcc)下载存储库并安装它或任何其他方式?