摘要: 数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的mov指令,而除c/c++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助c语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下几种情况: (1) 某i/o芯片被定位在cpu的存储空间而非i/o空间,而且寄存器对应于某特定地址; (2) 两个cpu之间以......
摘要: 模块划分 模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。c语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),c语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明; (2) 某模......
C语言嵌入式系统编程修炼之性能优化 使用宏定义 【程序编程相关:
Excel的两种另类排序法】 【推荐阅读:
你会用Word的排序功能吗?】 在c语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 【扩展信息:
Java技巧:列表排序】 写一个"标准"宏min ,这个宏输入两个参数并返回较小的一个: 错误做法: 正确做法: 对于宏,我们需要知道三点: (1)宏定义"像"函数; (2)宏定义不是函数,因而需要括上所有"参数"; (3)宏定义可能产生副作用. 下面的代码: 将被替换为: 发生的事情无法预料. 因而不要给宏定义传入有副作用的"参数". 使用寄存器变量 当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间.为此,c语言提供了一种变量,即寄存器变量.这种变量存放在cpu的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率.寄存器变量的说明符是register.对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者. (1) 只有局部自动变量与形参才可以定义为寄存器变量.因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量.模块内全局变量.局部static变量; (2) register是一个"建议"型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在c++语言中有另一个"建议"型关键字:inline). ...
下一页 摘要: 一、循环链表 循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。 循环链表的运算与单链表的运算基本一致。所不同的有以下几点: 1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为null。此种情况还使用于在最后一个结点后插入一个新的结点。 2、在判断......