问题标签 [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.
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 的上方。
makefile - SDCC 编译器的中断 STM8s 问题
我想在 SMT8S003K3 (STM8SVL-DISCOVERY) 上使用中断,当我在我的 main() 所在的其他文件上使用中断时,它无法被识别。
我做了两个测试: - 首先我将此代码修改为标准外设库:
它有效......
现在要使用 UnitTests,我将此函数放入另一个文件中:main_internal(只是一个简单的示例):
主要功能:
它什么也不做......它在STM8S003的深存储器中流动(正如我在调试器中看到的那样)。这是链接问题吗?
这是我的 Makefile:
这将是没有标准外设库的代码:
在这里,我有两个版本的 gdb 差异:
令人惊讶的是:00008034: int 0x0080d7 ;0x80d7 在 main_internal 的第二个版本中丢失了。
任何帮助,将不胜感激
c - 似乎有效的指针定义的语法错误(来自工作库)SDCC
我正在尝试为 Crazyradio PA 编译固件(但问题并非特定于它),我在其中添加了我需要的 Nordic Semiconductor SDK 的库。
该库最初打算在 Keil µVision IDE 下编译,所以我自然而然地更改了代码中的所有内容以使其与 SDCC 一起工作而没有太多麻烦,但是一个简单的指针定义让我很苦恼。SDCC 编译器给了我这个错误:
对应于代码中的这一行:
pbuf 是一个无符号字符指针,作为所有这些代码所在的函数的参数传递。
我尝试了以下方法,但未成功:
- 改变 buf 的数据类型(随便改,看看而已)
- 通过注释前后行来隔离问题
- 分配一个简单的值而不是 (unsigned char *)pbuf
问题仍然存在(对于数据类型的差异,当然也会发生变化)。解决方案可能很简单,但我的想法很短,而且我只是一个对 SDCC 几乎没有经验的实习生,所以我希望你能放纵一下。
再次感谢,请教育我做错了什么!:)
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 上进行强制转换,它按预期工作。
sdcc - 使用 SDCC 为 PIC16F 编译:在 RPi 上:libsdcc.lib:没有这样的文件或目录
我已经在 Raspberry Pi 2 上编译了 SDCC 3.7.0。但下一步我遇到了困难:使用SDCC编译 blink.c :
它只返回“libsdcc.lib:没有这样的文件或目录”。请帮忙!
c - 如何使用 SDCC 通过内存地址声明函数
(这里非母语人士,我为模糊的标题道歉)
我正在使用编译器套件sdcc (3.7.0) 为TI-82 STATS计算器编译 C 代码。它的处理器是Z80。操作系统提供了几个与设备交互的函数,例如内存地址 0x4755 处的 ClrLcdScreen(),它不接受任何参数并且不返回任何内容。
要在汇编中“声明”并调用该函数,我可以执行以下操作:
现在我不确定如何告诉 SDCC 在内存地址 0x4755 处有一个我想调用的函数。我怎样才能只写声明并让 SDCC 知道在运行时可以在哪里找到定义?
这就是我想象的解决方案的样子(以下代码不是真实的,它只是为了展示我需要的东西而编造的):
我尝试使用内联汇编调用该函数:
这有效,但不是我想要的。使用该代码,我自己管理调用,而 SDCC 根本不知道我正在调用一个函数。
c - 为什么以及何时 malloc() 在 C 中不可用?
我得到了一个带有嵌入式内部操作系统的基于 8051 的板。我正在使用 SDCC 在操作系统之上创建应用程序。而且 malloc 不可用,所以我必须静态分配内存。这是为什么?malloc 不应该在编译器中的动态库上吗?
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 刚刚坏了?
c - SDCC / GBDK,将结构数组传递给函数
我正在尝试将一对结构数组传递给 C 中的函数。
我必须使用 SDCC 编译器,因为我正在使用 GBDK 为 Gameboy 进行编译。
当我传递结构数组时,会出现如下所示的错误,但是,如果我完全取出函数定义并剪切并粘贴整个函数体来代替函数调用,那么代码将编译并顺利运行。
为简洁起见,我只包括相关的代码。
当我尝试使用 GBDK 和 SDCC 编译器进行编译时,出现以下错误:
当我删除对函数的调用,并简单地剪切和粘贴完整的函数体来代替函数调用时,它就可以顺利编译,我得到一个漂亮的随机游戏小贴图。
可以在此处看到图像,因为我没有图像代表:
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?