【笔记】MacOS上部署嵌入式开发环境
前言
在MacOS上编译针对于51单片机的C语言源代码,并将编译后的代码下载到单片机,本篇文章针对于Intel和Apple Silicon版本的Mac均有效
准备工作
安装编译器
1 | brew install sdcc |
安装驱动
安装成功后,可以通过
ls /dev/tty.*
或ls /dev/cu.*
命令验证
每个人的后缀通常不相同,例如我的第1个Mac雷雳接口后缀为10
,第2个Mac雷雳接口后缀为110
1 | ls /dev/tty.* |
安装下载器
- 下载器grigorig/stcgal项目是用Python写的模块,所以需要有Python环境,使用Pip安装
1 | pip3 install stcgal |
代码编写
- 单片机的源代码为C语言,C语言代码编辑器此处省略
- Windows中编写的C51代码使用Keil编译器,Mac中编写的C51代码使用sdcc编译器编译
- Keil中定义IO接口的值不允许使用二进制数(
0b00000000
),只能使用十六进制数(0x00
),而sdcc编译器可以使用二进制数(0b00000000
)
备注 | Windows Keil 语句或关键字 | Mac sdcc 语句或关键字 |
---|---|---|
定义头文件 | reg51.h 、reg52.h |
8051.h 、8052.h |
定义IO端口 | sbit P0^0; |
__sbit P0_0; |
定义IO端口的默认变量 | P2^0 |
P2_0 |
中断函数 | void xxx() interrupt 1 {...}; |
void xxx() __interrupt 1 {...}; |
small存储模式下默认使用的存储类型,对应直接寻址方式 | data |
__data |
medium存储模式下默认使用的存储类型,对应8位的寄存器间接寻址 | pdata |
__pdata |
large存储模式下默认使用的储存类型,对应16位的寄存器间接寻址 | xdata |
__xdata |
用间接寻址的方式,可以访问ROM的高128位 | idata |
__idata |
将数据存储在ROM中,只能存储常量 | unsigned char code xxx[] = {...}; |
__code unsigned char xxx[] = {...}; |
定义bit变量。51的位寻址区在内置RAM的0x20~0x2f区域,共128个位 | bit |
__bit |
定义特殊功能寄存器 | sfr P0; |
__sfr P0; |
关于at关键字的使用
- 指定变量的存储地址,减少指针的使用
备注 | Windows Keil 语句或关键字 | Mac sdcc 语句或关键字 |
---|---|---|
定义IO端口时使用地址 | sbit P0^0 = 0x81; |
__sbit __at (0x81) P0_0; |
定义特殊功能寄存器时使用地址 | sfr P0 = 0x80; |
__sfr __at (0x80) P0; |
编译
- 通过编译得到
.ihx
文件,.ihx
可以进一步转换为.hex
文件和.bin
文件
直接完成编译
1 | sdcc <library>.c |
先编译成链接库,再完成编译
- 通常用于多模块的大项目,先将所有模块编译成链接库文件,再将所有链接库编译完成
- 当部分模块被修改时,只需要先将修改的模块编译成新的链接库,再将其他模块的链接库与修改后模块的新链接库组合完成编译
<source>
:C语言源代码文件
<source_1>
:没有变动的源代码,通常编译成链接库链接库<source_2>
:有变动的源代码,通常与没有变动的源代码编译的链接库文件一起编译<library>
:链接库文件
1 | sdcc -c <source_1>.c |
ihx文件转换为hex文件(可选)
<file>
:文件名
1 | packihx <file>.ihx > <file>.hex |
ihx文件转换为bin文件(可选)
1 | sdobjcopy -I ihex -O binary <file>.ihx <file>.bin |
编译后生成的文件
<file>
:编译后的文件名
1 | - <file>.asm |
下载
- 确保已经安装完驱动,电脑与单片机已经连接好并测试没有问题的情况下
-P auto
:指定单片机类型
auto
:自动判定
-p 端口
:指定连接的端口
/dev/cu.wchusbserial10
:如果单片机连接的是Mac的第一个接口,那么通常后缀为10
/dev/cu.wchusbserial110
:如果单片机连接的是Mac的第二个接口,那么通常后缀为110
<file>.ihx
:编译后的文件
1 | stcgal -P auto -p /dev/cu.wchusbserial10 <file>.ihx |
完成
参考文献
博客园——俺踏月色而来
SDCC官网
简书——SyunSiu
CSDN——下一站2381
百度知道——一天入门51单片机
知乎——charlee
CSDN——_Sirius