嵌入式C语言的7个关键知识点详细说明

1 void 与 void*
void表示的是无类型,不可以采用这个类型声明变量或常量,但是可以把指针定义为void类型,如void* ptr。
void指针可以指向任意类型的数据,可用任意数据类型的指针对void指针赋值,比如int *ptrint;void *ptrvoid = ptrint ;指针的赋值可以认为是地址的传递,而一般的32位系统指针都是占用4个字节,所以指针赋值仅仅只是这4个字节的赋值与类型没什么关系。
1 void * memcpy( void *dest, const void *src, size_t len ); 2 void * memset( void * buffer, int c, size_t num);  
2 volatile关键字
volatile修饰表示变量是易变的,编译器中的优化器在用到这个变量时必须每次都小心地从内存中重新读取这个变量的值,而不是使用保存在寄存器里的备份,有效的防止编译器自动优化,从而与软件设计相符合。
3 数据占用大小
数据占用大小是指不同的数据类型在平台中所占用的字节个数,不同的平台不同类型占用的字节个数稍有不同,不过在对应的平台进行开发过程中,必须要对每个数据类型的占用大小了如指掌,否则各种数据溢出,数据越界等等接踵而来。下面是简单罗列的一些数据占用情况:(在一般32位pc中)
char 8bit
short 16bit
i n t 32bit
long 32bit
float 32bit
dou ble 64bit
4 const与指针
const是恒定不变的意思,与指针的结合主要的问题是其const在指针中的位置导致该变量属性不同。主要的识别办法是去掉数据类型,看const修饰的是哪部分。
const int *ptr --> const *ptr -->那么const修饰的就是*ptr,而*ptr表示的是指针所指向内容,所以其总体也叫常量指针表示值无法改变。
int *const ptr --> *const ptr -->那么const修饰的就是ptr,而ptr表示的是指针变量,指针变量的值就是地址,所以总体也叫指针常量表示地址无法改变。
5 结构体与共联体
对于结构体和共联体在嵌入式领域是使用得非常频繁的,一些可编程芯片提供的寄存器库都是采用结构体和共联体结合的方式来提供给软件人员进行开发,同时在平时的编码过程中这两个数据类型的灵活应用也能够实现代码更好的封装与简化。 如下面的简单示例,就可以非常灵活的访问val中的bit位。
1typedef union 2{ 3 byte val; 4 struct __packed 5 { 6 byte b0: 1; 7 byte b1: 1; 8 byte b2: 1; 9 byte b3: 1; 10 byte b4: 1; 11 byte b5: 1; 12 byte b6: 1; 13 byte b7: 1; 14 } bits; 15}byte_val, byte_bits; 6 预定义标识符
一般编译器都支持预定义标识符,这些标识符结合printf等打印信息帮助程序员调试程序是非常有用的,一般编译器会自动根据用户指定完成替换和处理。
如下是常用的标识: __file__  :表示进行编译的源文件字符串; __line__ :表示当前文件的行号;
__date__:表示文件日期; __time__ :表示文件时间;
使用范例:
1printf( file:%s\n line:%d \n data:%s \n time: %s \n,__file__,__line__,__date__,__time__);
7 #与##
#:是一种运算符,用于带参宏的文本替换,将跟在后面的参数转成一个字符串常量。
##:是一种运算符,是将两个运算对象连接在一起,也只能出现在带参宏定义的文本替换中。

华为VR眼镜白色外形,三点式包头设计
逆变电源在船舶恒压恒频中应用
中国台湾芯片企业详细名录
华为mate10渲染图曝光:麒麟970+莱卡三代双摄,性能秒杀苹果A11,10月16日发布
一个电路感受一下MOS管和三极管在功能上有什么区别?
嵌入式C语言的7个关键知识点详细说明
凯世通集成电路离子注入机迎来商业客户及多款设备订单的重大突破
非晶硅太阳能电池的应用案例有哪些?
NASA将开发核动力“隧道机器人”来探测木卫二的冰层
三星Galaxy Tab M62平板芯片与跑分曝光
斧工智能电批:电脑组装中的新锐利器
逆变器电路图和详细原理讲解
国产人工智能深度变革环保行业,首个人工智能垃圾分拣机器人落地
Toshiba推出适用于半导体测试仪高频信号开关的小型光继电器
基于FPGA的双备份多路数据采集存储系统的设计与实现
多通道振弦数据记录仪隧道中安全监测应用方案
采用LT3582-12的升压直流转换器电路图
华为公司系列NodeB产品的规格
专业解读:雾对红外热像仪性能影响
吉时利源表2450,不开机PCB不良维修