问题标签 [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 回答
942 浏览

interrupt - 不知道如何使用 SDCC 为 Z80 编写中断处理程序

我正在为 Z80 开发 C 语言程序并使用 SDCC 进行编译。我不知道如何为从 0x0066 开始的 NMI 中断和从 0x0038 开始的 IM1 中断创建中断处理程序。我正在使用这些调用:

并且生成的程序集看起来正确,但它们不在正确的地址。我确实发现了这个线程:

https://sourceforge.net/p/sdcc/feature-requests/519/

但无法弄清楚如何将上述示例 crt0.s 文件与 SDCC 一起用于 Z80 目标。使用 --use-crt 开关似乎不起作用。

任何有使用 SDCC 开发 Z80 的经验的人可以提供一些指导吗?

编辑:还没有。我的 crt.s 文件如下所示:

我正在做以下事情:

每件事似乎都编译得很好,但是当我在反汇编程序中调出代码时,我看不到任何 crt0 代码被插入到位置 0x08 到 0x66 的上方。

0 投票
1 回答
2010 浏览

makefile - SDCC 编译器的中断 STM8s 问题

我想在 SMT8S003K3 (STM8SVL-DISCOVERY) 上使用中断,当我在我的 main() 所在的其他文件上使用中断时,它无法被识别。

我做了两个测试: - 首先我将此代码修改为标准外设库:

它有效......

现在要使用 UnitTests,我将此函数放入另一个文件中:main_internal(只是一个简单的示例):

主要功能:

它什么也不做......它在STM8S003的深存储器中流动(正如我在调试器中看到的那样)。这是链接问题吗?

这是我的 Makefile:

这将是没有标准外设库的代码:

在这里,我有两个版本的 gdb 差异:

令人惊讶的是:00008034: int 0x0080d7 ;0x80d7 在 main_internal 的第二个版本中丢失了。

任何帮助,将不胜感激

0 投票
1 回答
866 浏览

c - 似乎有效的指针定义的语法错误(来自工作库)SDCC

我正在尝试为 Crazyradio PA 编译固件(但问题并非特定于它),我在其中添加了我需要的 Nordic Semiconductor SDK 的库。

该库最初打算在 Keil µVision IDE 下编译,所以我自然而然地更改了代码中的所有内容以使其与 SDCC 一起工作而没有太多麻烦,但是一个简单的指针定义让我很苦恼。SDCC 编译器给了我这个错误:

对应于代码中的这一行:

pbuf 是一个无符号字符指针,作为所有这些代码所在的函数的参数传递。

我尝试了以下方法,但未成功:

  • 改变 buf 的数据类型(随便改,看看而已)
  • 通过注释前后行来隔离问题
  • 分配一个简单的值而不是 (unsigned char *)pbuf

问题仍然存在(对于数据类型的差异,当然也会发生变化)。解决方案可能很简单,但我的想法很短,而且我只是一个对 SDCC 几乎没有经验的实习生,所以我希望你能放纵一下。

再次感谢,请教育我做错了什么!:)

0 投票
0 回答
144 浏览

c - C 左移意外行为

我有这个代码:

如果PortControl寄存器是11111111,第一行应该清除对应的位Pin,但出乎意料的是它清除了所有寄存器。

我的客户功能是:GPIO_InitPortPin(&TRISB, GPIO_PIN_0, GPIO_IN);

GPIO_PIN_0并且GPIO_IN是宏定义如下:

因此,我尝试将 Pin 转换为sint8*PortControl &= (~(1U << (sint8) Pin));

它奏效了。另外,我尝试将 Pin 硬编码为1并且效果很好。我知道问题是Pin或者uint8特别是unsigned因为

*PortControl &= (~(1U << 1)); 也工作得很好。我的问题是:为什么正确的操作数类型会影响移位操作,尽管我之前有红色(RHS 不影响操作)?

我正在使用 SDCC 编译器。

编辑:我已经测试了这个函数,没有在 gcc 上进行强制转换,它按预期工作。

0 投票
0 回答
370 浏览

sdcc - 使用 SDCC 为 PIC16F 编译:在 RPi 上:libsdcc.lib:没有这样的文件或目录

我已经在 Raspberry Pi 2 上编译了 SDCC 3.7.0。但下一步我遇到了困难:使用SDCC编译 blink.c :

它只返回“libsdcc.lib:没有这样的文件或目录”。请帮忙!

0 投票
1 回答
754 浏览

c - 如何使用 SDCC 通过内存地址声明函数

(这里非母语人士,我为模糊的标题道歉)

我正在使用编译器套件sdcc (3.7.0) 为TI-82 STATS计算器编译 C 代码。它的处理器是Z80。操作系统提供了几个与设备交互的函数,例如内存地址 0x4755 处的 ClrLcdScreen(),它不接受任何参数并且不返回任何内容。

要在汇编中“声明”并调用该函数,我可以执行以下操作:

现在我不确定如何告诉 SDCC 在内存地址 0x4755 处有一个我想调用的函数。我怎样才能只写声明并让 SDCC 知道在运行时可以在哪里找到定义?

这就是我想象的解决方案的样子(以下代码不是真实的,它只是为了展示我需要的东西而编造的):

我尝试使用内联汇编调用该函数:

这有效,但不是我想要的。使用该代码,我自己管理调用,而 SDCC 根本不知道我正在调用一个函数。

0 投票
3 回答
442 浏览

c - 为什么以及何时 malloc() 在 C 中不可用?

我得到了一个带有嵌入式内部操作系统的基于 8051 的板。我正在使用 SDCC 在操作系统之上创建应用程序。而且 malloc 不可用,所以我必须静态分配内存。这是为什么?malloc 不应该在编译器中的动态库上吗?

0 投票
3 回答
358 浏览

assembly - 无法让 .define 与 sdasz80(sdcc 汇编器)一起使用

SDCC 的汇编器源自 ASxxxx,其中手册在此处描述了 .define 命令:http: //shop-pdp.net/ashtml/asxs02.htm#define

由于它是派生的,因此可能并非所有内容都以相同的方式工作,但是由于命令行参数 help 谈论 .define ("-b Display .define substitions in Listing") 我假设它们在那里。

但是,当我这样做时:

我得到错误:

我尝试过的其他形式包括:

所有这些都导致了同样的错误。如果我尝试

错误变为:

虽然我得到了同样.blarg的错误,所以关键字可能已被删除(为什么?)

我做错了什么,还是 sdasz80 刚刚坏了?

0 投票
1 回答
364 浏览

c - SDCC / GBDK,将结构数组传递给函数

我正在尝试将一对结构数组传递给 C 中的函数。

我必须使用 SDCC 编译器,因为我正在使用 GBDK 为 Gameboy 进行编译。

当我传递结构数组时,会出现如下所示的错误,但是,如果我完全取出函数定义并剪切并粘贴整个函数体来代替函数调用,那么代码将编译并顺利运行。

为简洁起见,我只包括相关的代码。

当我尝试使用 GBDK 和 SDCC 编译器进行编译时,出现以下错误:

当我删除对函数的调用,并简单地剪切和粘贴完整的函数体来代替函数调用时,它就可以顺利编译,我得到一个漂亮的随机游戏小贴图。

可以在此处看到图像,因为我没有图像代表:

测试游戏画面

0 投票
1 回答
1008 浏览

sdcc - STM8 TIM1 (or TIM2) - one 5s tick after external interrupt event

I'm trying to implement this logic in STM8S103F3: 1) Controller wait for external interurpts on GPIOC (high by default) after initialization. 2.1) external interrupt triggered: if PIN5 of GPIOC is low, turn test led on, and start timer for 5s. 2.2) external interrupt triggered: if PIN5 of GPIOC is high, turn test led off and stop timer. 3) timer interrupt triggered: turn test led off.

My code:

External interrupt is triggered fine, but timer interrupt does not triggers.

What i'm doing wrong with timer, and how i can gix it?