![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式C语言
文章平均质量分 80
研究是为了理解
要想学会一件事,就不能什么都学。
展开
-
C 海拾珠
NULL 在头文件<stddef.h>、<stdlib.h>、<stdio.h>、<string.h>、<time.h>、<wchar.h>、<locale.h>中定义,只要编译器不能识别NULL,就应该在源文件中包含**<stddef.h>**头文件。原创 2020-12-17 12:50:40 · 761 阅读 · 0 评论 -
printf 日常使用指南
格式化适用场景调试输出LCD显示内容格式化函数的一般格式格式化输出函数printf、fprintf、sprintf和snprintf在格式化处理部分是相同的,本文以printf为例,说明此类函数的用法。printf函数的调用格式为:printf(“<格式化字符串>”, <参量表>);比如:printf("The Value %d.\n", 500); //输出数字这句代码产生如下输出:The value 500.格式化字符串在上面提到的 pri原创 2022-05-21 22:35:23 · 3555 阅读 · 1 评论 -
二级指针在链表中的应用
重读了两本书:Stephen A.Maguire的《编程精粹:Microsoft编写优质无错C程序秘诀》和David R. Hanson的《C语言接口与实现:创建可重用软件的技术》。两本书都有对链表的操作。假设有如图所示的链表,链表节点的pb成员指向一个缓冲块,删除节点函数根据缓冲块的首地址,找到节点并删除节点:《编程精粹》使用一个变量pbiPrev来保存前一个节点位置,并且要处理删除的是第一个节点A这种边界条件:void FreeBlockInfo(byte *pbToFree){ block原创 2021-01-27 21:27:48 · 1633 阅读 · 0 评论 -
曾让我哭笑不得抓狂的C语言
1.关于+=以及-= 这是两个运算符,但你否有过这种经历: int temp; char i for(i=0;i<MAX;i++) { ... temp=+2; //这里本意是每次循环,temp都自增2,但是却将'+='写成了'=+',按照这种写法,每次循环都为temp赋值正数2,与本意相差甚远 }2. 关于意想不到的死循环 unsigned char i;原创 2012-02-11 21:33:21 · 10993 阅读 · 8 评论 -
良好的编程风格(一)
<br />本文摘自我整理编写的<嵌入式C进阶之道>,完全版本请访问http://wenku.baidu.com/view/36c515ec102de2bd960588f5.html<br /> <br />编程的总则:编程首要是要考虑程序的可行性,然后是可读性、可移植性、健壮性以及可测试性。大多数程序员只是关注程序的可行性,而忽略了可读性,可移植性和健壮性,其实我个人认为,程序的可行性和健壮性与程序的可读性有很大的关系,能写出可读性很好的程序的程序员,他写的程序的可行性和健壮性必然不会差,也会有不错的可移原创 2010-10-16 19:33:00 · 7829 阅读 · 5 评论 -
又见优先级
<br />最近编写一个程序,其中有下面一句,g_ucTimeValue[0]=0x23,但表示的确是十进制的23,我想使用下句代码将这个十进制的23变成十六进制的0x17,但结果d的值却是0x07,为了查找根源,对这句C语言进行反汇编.<br />d=(g_ucTimeValu原创 2011-04-23 12:20:00 · 2152 阅读 · 0 评论 -
运算符优先级引发的bug
这个错误也是好久前的了.错误描述:在一个程序中,我想判断一个寄存器与(&)上(1 if(IO0SET&(1这样写其实是得不到正确的结果的,因为我忽略了"=="的优先级是大于"&"的.按照上面的代码分析:因为"=="的优先级大于"&",所以程序先判断(1按照原意,应该这样写: if((IO0SET&(1原创 2010-11-01 19:14:00 · 2461 阅读 · 3 评论 -
编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。转载请注明出处:http://blog.csdn.net/zhzht19861011/article/details/45508029摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检...原创 2015-05-05 21:26:30 · 74971 阅读 · 56 评论 -
嵌入式C语言之---模块化编程
当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干。你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程。比如你可能只是负责通讯或者显示这一块。这个时候,你就应该将自己的这一块程序写成一个模块,单独调试,留出接口供其它模块调用。最后,小组成员都将自己负责的模块写完并调试无误后,由项目组长进行组合调试。像这些场合就要求程序必须模块化。模块化的好处是很多的,不仅原创 2010-10-29 11:38:00 · 69166 阅读 · 36 评论 -
*string++优先级的问题
这个东西困扰了我几天,关于优先级问题确实是个恼人的东西,为了这个专门翻了C语言课本,得知 所有一目运算符都是第二级优先级 结合性是从右到左 那么*string++应该就是*(string++),也就是先++,再*取值。但是让我想不通的是先++后,指针指向了下一地址,那么当前地址不久落开了吗? 后来再看C语言a++与++a时才突然顿悟: *string++是取出当前字符后将指针后移,因为原创 2009-10-22 11:03:00 · 4370 阅读 · 3 评论 -
良好的编程风格(二)
本文摘自我整理编写的,完全版本请访问http://wenku.baidu.com/view/36c515ec102de2bd960588f5.html3.标识符a. 变量的命名方法一:采用匈牙利命名法。命名规则的主要思想是“在变量中加入前缀以增进人们对程序的理解”。例如平时声明32位整型变量Length对应使用匈牙利命名法为unLength。现在列出经常用到的变量类型。变量类型 示例char原创 2010-10-16 19:34:00 · 8810 阅读 · 8 评论 -
嵌入式C语言不可不用的关键字
<br />1.static关键字<br />这个关键字前面也有提到,它的作用是强大的。<br />要对static关键字深入了解,首先需要掌握标准C程序的组成。<br />标准C程序一直由下列部分组成:<br /> 1)正文段——CPU执行的机器指令部分,也就是你的程序。一个程序只有一个副本;只读,这是为了防止程序由于意外事故而修改自身指令;<br /> 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。<br /> 3)非初始化数据段(bss段原创 2010-10-29 19:47:00 · 9941 阅读 · 9 评论 -
嵌入式软件可靠性设计的一些理解
0.前言 设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈一下作者自己对嵌入式软件可靠性设计的一些理解,通过一定的技巧和方法提高软件可靠性。这里所说的嵌入式设备,是指使用单片机、ARM7、Cortex-M0,M3之类为核心的测控或工控系统。 嵌入式软件可靠性设计应该从防错、判错和容错三方面进行考虑. 此外原创 2013-12-04 15:00:51 · 18090 阅读 · 16 评论