Mar*_*bee 4 c embedded assembly z80 sdcc
我熟悉 C 编程语言和 z80 程序集,我制作了一个简单的 z80“计算机”,只有带有 32k ram、32k rom 和 8255 pia 的 cpu 用于 io 控制。我已经让 8255 通过汇编语言子程序在我的系统上点亮 LED。
所以问题是:如果有 SDCC(Small Device C 编译器)可以将 C 程序编译成包括 z80 在内的各种小型 CPU 的程序集,如果没有 stdio 库或任何库,你如何创建 C 程序?因为这个系统是如何定制的。我是否被迫先使用汇编,然后将函数作为 ASM 例程进行调用?我是否误解了某种关键思想?我很困惑这是如何工作的。我不能在没有输出的系统上只使用 printf()。更不用说 printf() 是在假设终端以某种方式连接的情况下进行的。
您将编写一个特定于平台的 I/O 库,该库利用您的平台可用的任何 I/O 功能。在许多嵌入式系统上,在 UART 串行端口上实现了最小的标准 I/O,因此您的“控制台”可以是主机 PC 上的终端仿真器。
您的 I/O API 不需要像标准库的 stdio 那样复杂。它也不需要用汇编程序编写,内存映射外设的寄存器级访问在 C 中是可能的(实际上是正常的) - 毕竟它是一种系统级语言。
尽管如此,SDCC 已经包含一个标准库子集,其中包含一个子集 stdio。因此,您认为自己缺乏这种支持的原因尚不清楚。您必须提供特定于低级别平台的支持,但要支持printf您只需要实现putchar()在您选择的标准输出设备上发出一个字符。对于无缓冲的串行输出,这是相当微不足道的。更复杂的实现可能使用中断驱动的缓冲串行输出。SDCC 手册中描述了库的移植。