使用 SDCC 开发 STM8
本文介绍如何在 EIDE 上将 STM8 标准库移植到 SDCC 工具链,并完成测试
以 STM8S105K4T6 为例,其他的库过程大都相同
1. 创建 STM8 项目
- 打开 EIDE, 新建项目,类型选择 C51,注意:路径里最好不要有中文空格,在编译器里会出错
- 切换工具链至 SDCC, 打开编译选项,设置 device 为 stm8
- 设置宏,本项目为:STM8S105,USE_STDPERIPH_DRIVER
- 新建一个目录,将复制外设库到里面,并去除掉芯片不支持的外设源文件
2. 移植过程:主要针对 stm8s.h, 其他文件基本不用动
移植的过程并不复杂,就是参照其他编译器的定义,查询 SDCC 手册,写出适合 SDCC 的定义
注:以下对比图,左图为原文件,右图为修改后的
-
定义编译器宏:查阅 SDCC 手册,SDCC 编译器定义的宏为: __SDCC
-
重定义关键字,SDCC 手册中不支持的就设置为空,编译时将会忽略这些关键字
-
重定义内嵌汇编指令,SDCC 格式为 __asm__(x)
-
重定义 interrupt ,trap 关键字, SDCC 格式为: __interrupt(x), __trap
3. 开始项目
在 main.c 中写好闪烁LED 的示例
注意:SDCC 要求含有 main() 函数的源文件必须处于链接的第一个位置;如果你的 main() 函数不是在默认的 main.c 中,务必到编译选项中更改 “$mainFileName” 字段为 main() 实际所处的源文件名
开始编译,发现出现了错误,直接跳转到出错的源文件
发现是这个函数是用的内联汇编实现的,于是用 SDCC 也实现一下
框出的部分即为加上去的 SDCC 实现
再启动编译,成功
出现了两个警告,第一个提示函数没返回值,来自上一步,但注释中说可以直接忽略。第二个查看了一下也没影响
4. 下载到开发板
安装好 STVP, 并设置好 STVP_CmdLine.exe 的路径,连接 ST-LINK,点击下载
提示下载成功
板子上 LED 正常闪烁