【笔记】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