网易首页 > 网易号 > 正文 申请入驻

采用开源工具学习51单片机

0
分享至

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。传统上,51单片机一般用keil c集成环境来进行编译开发,然后直接烧录到芯片上去运行,这有几个缺点:

·keil C是商业软件,很多人都想白嫖,而是要么使用盗版(破解版),要么使用它的演化版,前者存在法律风险,也有道德瑕疵,后者有功能上的限制;

·就算keil C买了正版,也有不尽如人意的地方,比如keil C对C99和C11的支持不好;

·直接烧录到芯片比较繁琐,对反复的测试不直观和方便。

对上面的问题,我们可以采用开源和免费的工具来实现编译和仿真来避免这一类的问题。

首先,我们可以采用开源免费的sdcc来进行编译,关于sdcc的介绍,可以看下面:

SDCC - Small Device C Compilersdcc.sourceforge.net/

SDCCis a retargettable, optimizing Standard C (ANSI C89,ISO C99, ISO C11) compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90), Padauk (pdk14, pdk15) and STMicroelectronics STM8. Work is in progress on supporting the Padauk pdk13 target; Microchip PIC16 and PIC18 targets are unmaintained. SDCC can be retargeted for other microprocessors.
SDCC was originally written by Sandeep Dutta and released under aGPL license.

可见SDCC解决了我们两个大问题:开源免费,以及支持C99和C11(最新版还支持C2x)。

下载安装完成后,可以采用下面的命令来对编好的C程序文件进行编译:

sdcc源文件.c编译选项[-o输出文件名]

简单的使用,我们可以用下面的命令来编译满足C99标准(有少量的不满足)的8051程序:

sdcc源文件.c --std-c99 -o输出文件

除此之外,还可以设置:--std-sdcc99来支持sdcc的扩展功能,或者--std-c11和--std-sdcc11以支持C11的标准(以及sdcc的扩展),和--std-c2x和--std-sdcc2x以支持C2x的草案。

简单归纳一下:

ISO C90 / ANSI C89标准:

·不支持double、long double类型;

·不支持将结构体(struct)和联合体(union)作为函数的参数和返回值;

·不支持 K&R风格的函数定义;

·对于51系列单片机,默认情况下函数是不可重入的(function are not reentrant),意味着默认情况下函数内的变量是static,并被放置在统一的数据空间(data-space),这主要是因为51系列的内存太小的缘故,如果需要变量存放在函数的栈(stack)内,需要单独进行函数的修饰说明,如下:

unsignedcharfoo(chari)__reentrant{...}

或者在编译的时候加上--stack-auto选项,或者如下加上预编译指令:

#pragma stackauto

ISO C99标准:

·(上面C89的那些不支持的内容);

·不支持复合字面量(Compound literals),即能够就地构造一个指定类型的无名对象,在只需要一次数组、结构体或联合体变量时使用,如下简单示例如何使用复合字面量:

int*p=(int[]){2,4};//创建一个无名的 int[2]类型静态存储数组//初始数组为值 {2, 4}//创建指向数组首元素的指针 pconstfloat*pc=(constfloat[]){1e0,1e1,1e2};//只读复合字面量intmain(void){

intn=2,*p=&n;

p=(int[2]){*p};//创建一个无名的 int[2]类型自动存储数组//初始化首个元素为之前 *p所持有的值//初始化第二个元素为零//将首元素的地址存储到 p

structpoint{doublex,y;};

voiddrawline1(structpointfrom,structpointto);

voiddrawline2(structpoint*from,structpoint*to);

drawline1((structpoint){.x=1,.y=1},//创建二个块作用域的结构体(structpoint){.x=3,.y=4});//然后调用 drawline1,以值传递drawline2(&(structpoint){.x=1,.y=1},//创建二个块作用域的结构体&(structpoint){.x=3,.y=4});//然后调用 drawline2,传递其地址}

这真的很可惜,这是C99的很大一个优势,不过8051的sdcc本来就不支持结构体作为函数的参数,所以影响还不大;

·不支持非常量长度数组(Variable-length arrays,VLA),即数组定义时其长度可以是一个变量,下面是简单示例VLA的用法:

intn=1;label:;

inta[n];//重分配 10次,每次拥有不同大小printf("The array has %zu elements\n",sizeofa/sizeof*a);

if(n++<10)gotolabel;//离开作用域的 VLA结束其生存期}

·不支持非ASCII字符的宏名(Non-ASCII characters in macro names)

烧录到stc 8051芯片上的程序,可以用stcflash,这是python脚本,需要安装python环境。

对于8051的仿真,可以采用多种仿真器,其中,最直观简单的是edSim51,这是用java编写的,可以适用在不同的操作系统上,其自带了LED、按键、数码管、ADC、DAC、步进电机等模拟,非常适合教学和学习练习。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
曼联4200万可签德里赫特!拉爵或改变新中卫目标,大英铁卫亦候选

曼联4200万可签德里赫特!拉爵或改变新中卫目标,大英铁卫亦候选

罗米的曼联博客
2024-06-16 09:09:49
广东深圳,男子喜获双胞胎儿子,可他无意间发现,两个儿子竟然两个爹

广东深圳,男子喜获双胞胎儿子,可他无意间发现,两个儿子竟然两个爹

娱乐圈见解说
2024-06-16 07:05:18
张天爱自拍大秀“凶器”,身材气质绝佳!曾和娜扎联手锤渣男?

张天爱自拍大秀“凶器”,身材气质绝佳!曾和娜扎联手锤渣男?

狐飞火
2024-06-15 00:40:03
德布劳内:有些球队比我们更热门 我们需要取得一个好的开始

德布劳内:有些球队比我们更热门 我们需要取得一个好的开始

直播吧
2024-06-16 11:44:15
张镇麟晒新疆旅游照:原谅我的拍照技术 只会直男视角

张镇麟晒新疆旅游照:原谅我的拍照技术 只会直男视角

直播吧
2024-06-15 22:15:04
汶川9岁英雄,被姚明抱上奥运会,发誓考清华,16年后竟活成这样

汶川9岁英雄,被姚明抱上奥运会,发誓考清华,16年后竟活成这样

华人星光
2024-06-14 16:18:28
加强漏洞!美国媒体:4换1交易曝光,火箭势必崛起,森林狼不亏!

加强漏洞!美国媒体:4换1交易曝光,火箭势必崛起,森林狼不亏!

元爸体育
2024-06-16 07:39:47
“难度直线飙升,堪比高考”!上海中考作文题公布,进来挑战→

“难度直线飙升,堪比高考”!上海中考作文题公布,进来挑战→

上观新闻
2024-06-15 18:19:51
张学良临终吐露,当年被蒋介石扣押后,救他一命的其实不是宋美龄

张学良临终吐露,当年被蒋介石扣押后,救他一命的其实不是宋美龄

小金鱼的眼泪
2024-06-16 10:25:00
同房后,精子进入女人体内没“受精”,女人身体会有什么感觉?

同房后,精子进入女人体内没“受精”,女人身体会有什么感觉?

荷兰豆爱健康
2024-06-16 07:45:07
又上当了!老美急哭:我只是想吓吓你们而已,不要当真啊

又上当了!老美急哭:我只是想吓吓你们而已,不要当真啊

芯怡飞
2024-06-10 10:49:06
孙中山临终前想睡在地上,还要求有冰,侧室听后哭道:他还记得

孙中山临终前想睡在地上,还要求有冰,侧室听后哭道:他还记得

否知
2024-06-14 09:55:31
这16岁?!亚马尔1v4单挑克罗地亚整条防线,2次变向直接晃倒对手

这16岁?!亚马尔1v4单挑克罗地亚整条防线,2次变向直接晃倒对手

直播吧
2024-06-16 01:37:13
G7统一对华施压,中国改签货币协议,降息潮来临,人民币汇率回调

G7统一对华施压,中国改签货币协议,降息潮来临,人民币汇率回调

说天说地说实事
2024-06-15 19:50:03
千里马姜萍改变伯乐王闰秋命运,这里隐藏着一个神奇密码?

千里马姜萍改变伯乐王闰秋命运,这里隐藏着一个神奇密码?

解筱文
2024-06-16 00:06:54
他曾是中央政治局常委,后却被秘密处决,尸骨至今仍下落不明

他曾是中央政治局常委,后却被秘密处决,尸骨至今仍下落不明

燕小姐说历史
2024-06-15 08:49:56
主动发声!马刺引爆联盟,法国前锋或联手文班,莱特太会办事了

主动发声!马刺引爆联盟,法国前锋或联手文班,莱特太会办事了

体育晓二
2024-06-16 11:14:59
回顾上海华山医生杀妻细节曝光,疑与出轨有关,妻子执意打掉二胎

回顾上海华山医生杀妻细节曝光,疑与出轨有关,妻子执意打掉二胎

琪琪故事记
2024-06-16 07:17:04
2-0!瑞士“廉价前锋”破门,利物浦巨星全场隐身,破欧洲杯纪录

2-0!瑞士“廉价前锋”破门,利物浦巨星全场隐身,破欧洲杯纪录

汪星人哟
2024-06-15 21:50:55
俄专家:俄中双方在三年内启动大约3000个投资项目

俄专家:俄中双方在三年内启动大约3000个投资项目

俄罗斯卫星通讯社
2024-06-15 16:05:26
2024-06-16 12:10:44
小伙单片机编程
小伙单片机编程
想学单片机的看过来,带你入门
75文章数 263关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

家居
本地
数码
时尚
公开课

家居要闻

空谷来音 朴素留白的侘寂之美

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

数码要闻

双 25G SFP28 网口,微星推出 D3052 服务器 AM5 MATX 主板

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版