使用 SDCC 开发 STM8

本文介绍如何在 EIDE 上将 STM8 标准库移植到 SDCC 工具链,并完成测试

以 STM8S105K4T6 为例,其他的库过程大都相同


1. 创建 STM8 项目

  1. 打开 EIDE, 新建项目,类型选择 C51,注意:路径里最好不要有中文空格,在编译器里会出错
  2. 切换工具链至 SDCC, 打开编译选项,设置 device 为 stm8
  3. 设置宏,本项目为:STM8S105,USE_STDPERIPH_DRIVER
  4. 新建一个目录,将复制外设库到里面,并去除掉芯片不支持的外设源文件

2. 移植过程:主要针对 stm8s.h, 其他文件基本不用动

移植的过程并不复杂,就是参照其他编译器的定义,查询 SDCC 手册,写出适合 SDCC 的定义

注:以下对比图,左图为原文件,右图为修改后的

  1. 定义编译器宏:查阅 SDCC 手册,SDCC 编译器定义的宏为: __SDCC
    使用 SDCC 开发 STM8
  2. 重定义关键字,SDCC 手册中不支持的就设置为空,编译时将会忽略这些关键字
    使用 SDCC 开发 STM8
  3. 重定义内嵌汇编指令,SDCC 格式为 __asm__(x)
    使用 SDCC 开发 STM8
  4. 重定义 interrupt ,trap 关键字, SDCC 格式为: __interrupt(x), __trap
    使用 SDCC 开发 STM8

3. 开始项目

在 main.c 中写好闪烁LED 的示例


注意:SDCC 要求含有 main() 函数的源文件必须处于链接的第一个位置;如果你的 main() 函数不是在默认的 main.c 中,务必到编译选项中更改 “$mainFileName” 字段为 main() 实际所处的源文件名
使用 SDCC 开发 STM8

开始编译,发现出现了错误,直接跳转到出错的源文件
使用 SDCC 开发 STM8
发现是这个函数是用的内联汇编实现的,于是用 SDCC 也实现一下
框出的部分即为加上去的 SDCC 实现
使用 SDCC 开发 STM8
再启动编译,成功
出现了两个警告,第一个提示函数没返回值,来自上一步,但注释中说可以直接忽略。第二个查看了一下也没影响
使用 SDCC 开发 STM8


4. 下载到开发板

安装好 STVP, 并设置好 STVP_CmdLine.exe 的路径,连接 ST-LINK,点击下载

提示下载成功
使用 SDCC 开发 STM8
板子上 LED 正常闪烁
使用 SDCC 开发 STM8


此示例已上传至 EIDE 模板,可下载并安装