X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
下载中心专版
[分享] 你想培养良好的嵌入式编程风格吗?看看《嵌入式C语言进阶之道》吧
tiankai001
2014-4-26 23:30
楼主
嵌入式C语言进阶之道
C语言的书有一大堆,嵌入C语言的书也不少,但都不过是简单介绍一下标准C语言的语法,再讲一下嵌入式C语言与标准C的区别,讲一下新增加的关键字。这样的书,对于初学者或许是适合的。问题是,若是我不愿意只是当一个小菜鸟,我想对嵌入式C语言有更多更深的了解时,我突然发现,满图书馆的书,竟找不到一本,能解我心头之惑。
对于在实际工作当中, 你不再是独自编写程序,你要和小组内的成员之间分工合作,你要学会模块化编程、要写出更规范更安全的代码、做更合理的优化、减少更多的bug。所有的这些,都迫使你必须更彻底的理解嵌入式C的语法结构,数据细节,与硬件打交道的特性,使得你必须时时考虑硬件与C的对应关系并养成良好的编程习惯。
本文的原意是想尽可能多的解决上述问题,帮助更多的新人深入理解嵌入式C语言。
本文是我工作之余整理而来。是对我个人学习嵌入式C语言过程的总结。本文涉及的知识点多数来自于网络,其中加入我个人理解以及自己平时遇到的注意点。
本文从编程风格谈起,讲述了模块化的编程方法,对一些大型项目中常用重点关键字做了讲解,参照MISRA C 2004规范,对嵌入式C安全编程做了阐述,对一些嵌入式C的小技巧进行了讨论。
在读本文时,我假设你有C语言基础、至少理解一种微控制器(51、PIC、AVR、DSP、ARM等)、有简单的(这里本想写较深的)汇编基础。
http://download.eeworld.com.cn/detail/499362154/1584
点赞
回复评论 (2)
沙发
tiankai001
良好编程风格——读《嵌入式c语言进阶之道》整理
一.排版:
代码缩进空格数为4个;
较长的语句分2行来写;
函数的参数较多、较长时,分多行来书写;
if、do、while、switch、for、case等关键字,必须加上大括号{}。
二.注释:
边写代码边注释,修改代码同事修改相应的注释,以保持注释与代码的一致性;
说明性文件必选在文件头着重说明,例如*.c、*.h文件;
函数头应该要注释,包括函数名称、输入参数、返回值、功能说明等;
全局变量和关键的局部变量要注释其功能;
复杂的宏定义同样要加上注释;
复杂的结构体同样要加上注释;
如有相对独立的语句组注释,写在语句组上行,不留空格。
三.标示符:
变量的命名;
局部变量以小写字母命名;
全局变量以首字母大写方式命名(骆驼式);
定义类型和宏定义常数以大写字母命名;
变量的作用域越大,它的名字所带有的信息就应该越多。
变量命名要注意缩写并且让人简单易懂,若是特别缩写要详细说明;
全局变量和全局函数的命名一定要详细,不惜多用几个单词;
用于编译开头的文件头,必须加上当前文件名称,防止编译时产生冲突;
禁止用汉语拼音作为标示符名称;
建议名称间的区别要显而易见。
四.表达式和基本语句:
不要编写太复杂的复合表达式;
不要有多用途的复合表达式;
如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级;
if语句:
不可将布尔变量直接跟TRUE、FALSE或者1、0进行比较;
应当将整型变量用"=="或"!="直接与数字比较;
避免将浮点变量用"=="或"!="直接与数字比较,应该转化为">="或"<="形式。
五.杂项:
一些常量(如圆周率PI)或者常需要在调试时修改的参数最好用#define定义;
不要轻易调用某些库函数;
对各优先级不熟的话,加上括号;
不管有没有无效分支,switch函数一定要default分支;
函数的参数和返回值没有的话最好使用void;
一些常数和表哥之类的应该放在code中去节省RAM;
程序编完编译看有多少code多少data,注意不要使堆栈为难;
减少函数本身或函数间的递归调用;
编写可重入函数时,若使用全局变量,则应通过关中断、信息量(P、V操作)等手段对其加以保护;
在多重循环中,应将最忙的循环放在最内层;
避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中;
系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用;
编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。
点赞
2014-4-26 23:32
板凳
armxiaohai
学习了,好的编程习惯对于编写好的程序有着决定性的作用,我们要从一点一滴做起,培养好的变成习惯,从注释到函数书写,都要注意
点赞
2014-4-27 10:28
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
ON的个人数字助理产品方案!
EEWORLD大学堂----linux多线程编程
FPGA Verilog/VHDL 学习软件解惑!求指教
求救
聊聊一颗电源芯片的内部设计
用map430G launchpad 无法给msp430fr6989和msp430f67791下载程序?
为啥日本没能弄死韩国半导体
求430f149的例程和c语言教程,立马给分
CCS3.3下的工程用在CCS6上,编译出错
ADC12和SD16有什么区别?
msp430g2553 的usci_b0 spi模式问题
PCB电路中线宽和接线的问题
初次接触PIC,结果配置那儿一直报错,求大神
AD、DA转换器的一般分类及其技术指标
简述单片机P1口实现4X4行列式扫描键盘的工作原理。
基于TMS320DM6437的视频采集
终于点亮了的tmdsf28027usb的第一个led,特此发帖纪念一下
I2C问题请教版主
AD1904版本 如何在SCH文件中 全部选中器件的位号 或 标称值
WiFi认证过程需要的协议和服务
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复