嵌入式C语言
refine19
这个作者很懒,什么都没留下…
展开
-
嵌入式程序员应知道的基本问题
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数, 用以表明 1年中有多少秒 (忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: · #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) · 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 · 意识到这个表达式将使一个16位机的整型数溢出转载 2010-07-17 21:51:00 · 463 阅读 · 0 评论 -
单片机中volatile定义的作用详解
<br /><br /> 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: <br /> 1). 并行设备的硬件寄存器(如:状态寄存器) <br /> 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) <br /> 3). 多线程转载 2011-04-24 12:36:00 · 1020 阅读 · 0 评论 -
x&(x-1)表达式的意义
<br />求下面函数的返回值(微软) -- 统计1的个数<br />-------------------------------------<br />int func(int x)<br />{<br /> int countx = 0;<br /> while(x)<br /> {<br /> countx++;<br /> x = x&(x-1);<br /> }<br /> return countx;<br />} <br /><br转载 2010-11-13 15:00:00 · 391 阅读 · 0 评论 -
结构体中的位域
<br />位域<br /><br /> 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式转载 2010-11-13 15:39:00 · 456 阅读 · 0 评论 -
选择实时操作系统(RTOS)的要点详解
<br />对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗?答案是取决于具体的应用,因此了解我们要达到什么目标是决定RTOS是必要的还是花瓶的关键。<br /> 一般来说,在采用非实时操作系统(non-RTOS)的任何场合,也都可采用RTOS。但是,要找到一款具有完全相同应用编程接口(API)的匹配RTOS就相当困难了。因此,许多传统的操作系统(OS)在其内嵌入了一个RTOS。例如,Lynux-Works LynxOS和Bluecat Linux共享一个Lin原创 2010-10-30 00:59:00 · 1587 阅读 · 0 评论 -
高效可移植程序的一些习惯(转)
对于一些状态的集合,尽可能使用enum而不是#define 来定义。<br /><br />如:<br /><br />enum {OFF = 0, ON = 1};<br /><br />远比<br />#define OFF 0<br /><br />#define ON 1<br /><br />好。<br /><br />两种写法编译的效果是一样的,但是写程序及看程序的人员来说感觉就不一样了。用enum定义时,可以觉得OFF与ON是一个集合,有相关性(且可减少程序中#define的定义)。但用#de转载 2010-10-30 00:56:00 · 403 阅读 · 0 评论 -
基于ARM的高效C语言编程
<br />ARM处理器提高执行速度和减小代码尺寸是嵌入式软件设计的关键需求,以其高性能、低功耗、低成本等优势被广泛应用于各种成功的32位嵌入式系统中。尽管大多数的ARM编译器和调试器都带有性能优化工具,但是为了保证其正确性,编译器必须是稳妥和安全的,而且它还受到处理器自身结构的限制。因此,编程人员必须在理解编译器工作特点的基础上来实现代码优化。代码的优化方法较多,本文针对函数优化方法进行阐述。 <br />1 函数局部变量的数据类型<br /> 局部变量包括函数内局部变量、函数参数、函数返回值。由于A原创 2010-10-30 00:54:00 · 673 阅读 · 0 评论 -
如何优化C语言代码
<br />1、选择合适的算法和数据结构<br />应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有<br />很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找<br />法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大<br />提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存<br />放的数中使用了大量的插入和删除指令,那使用链表要快得多。<br />数组与指针语句具有十分密码的关系,一般来说,指针比较灵活转载 2010-10-30 00:52:00 · 399 阅读 · 0 评论 -
SPI总线简介
<br /><br />同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信。<br />SPI(Serial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI 接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS 决定了唯一的与主设备通信的从转载 2010-11-30 21:56:00 · 631 阅读 · 0 评论 -
sin(x)的泰勒级数展开运算
<br /> 该程序其实并不难,但是在开始的时候一直没有进行弧度转换,即x *= 3.1415926/180,导致结果一直不对,不过最后总算还是弄对了,呵呵。<br />直接上代码:<br />include <stdio.h>#include <stdlib.h>#include <math.h>#define MIN_GATE 10e-7//利用泰勒级数计算sinx函数float TaylorSin(float x){ int i = 1; int k = 2;原创 2011-05-08 11:22:00 · 15178 阅读 · 3 评论