导读:怎么做好嵌入式?相信这个问题无论问谁你都会得到一句学好C语言!今天推荐一篇大佬写的嵌入式C语言知识点总结,非常值得一读。从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式C程序并非易事,不仅需要熟知硬件特性和缺陷,还需要对编译原理和计算机技术知识有着一定的了解。本文以嵌入式实践为基础,再结合相关资料, 阐述嵌入式需要了解的C语言知识和重点,希望每个读到这篇文章的人都能有所收获。
关键字关键字是C语言中具有特殊功能的保留标示符,按照功能可分为1). 数据类型(常用char, short, int, long, unsigned, float, double)2). 运算和表达式(=, , -, *, while, do-while, if, goto, switch-case)3). 数据存储(auto, static, extern,const, register,volatile,restricted),4). 结构(struct, enum, union,typedef),5). 位操作和逻辑运算(<<, >>, &, |, ~,^, &&),6). 预处理(#define, #include, #error,#if…#elif…#else…#endif等),7). 平台扩展关键字(__asm, __inline,__syscall)这些关键字共同构成了嵌入式平台的C语法。嵌入式的应用从逻辑上可以抽象为三个部分:1). 数据的输入(如传感器,信号,接口输入),2). 数据的处理(如协议的解码和封包,AD采样值的转换等)3). 数据的输出(GUI的显示,输出的引脚状态,DA的输出控制电压,PWM波的占空比等),对于数据的管理就贯穿着整个嵌入式应用的开发,它包含数据类型,存储空间管理,位和逻辑操作,以及数据结构,C语言从语法上支撑上述功能的实现,并提供相应的优化机制,以应对嵌入式下更受限的资源环境。
预处理机制C语言提供了丰富的预处理机制,方便了跨平台的代码的实现,此外C语言通过宏机制实现的数据和代码块替换,字符串格式化,代码段切换,对于工程应用具有重要意义,下面按照功能需求,描述在C语言运用中的常用预处理机制。#include 包含文件命令,在C语言中,它执行的效果是将包含文件中的所有内容插入到当前位置,这不只包含头文件,一些参数文件,配置文件,也可以使用该文件插入到当前代码的指定位置。其中<>和””分别表示从标准库路径还是用户自定义路径开始检索。#define宏定义,常见的用法包含定义常量或者代码段别名,当然某些情况下配合##格式化字符串,可以实现接口的统一化处理,实例如下:#define MAX_SIZE 10#define MODULE_ON 1#define ERROR_LOOP() do{\ printf(“error loop\n”);\ }while(0);#define global(val) g_##valint global(v) = 10;int global(add)(int a, int b){ return a b;}#if..#elif…#else…#endif, #ifdef..#endif, #ifndef…#endif条件选择判断,条件选择主要用于切换代码块,这种综合性项目和跨平台项目中为了满足多种情况下的需求往往会被使用。#undef 取消定义的参数,避免重定义问题。#error,#warning用于用户自定义的告警信息,配合#if,#ifdef使用,可以限制错误的预定义配置。#pragma 带参数的预定义处理,常见的#pragma pack(1), 不过使用后会导致后续的整个文件都以设置的字节对齐,配合push和pop可以解决这种问题,代码如下:#pragma pack(push)#pragma pack(1)struct TestA{ char i; int b;}A;#pragma pack(pop); //注意要调用pop,否则会导致后续文件都以pack定义值对齐,执行不符合预期等同于 struct _TestB{ char i; int b;}__attribute__((packed))A;
~END~
??电压反接保护电路??傅里叶变换还可以这样解说,讲的太好了!??为什么电动工具一般都用有刷电机,用无刷电机不行吗???辛苦整理的C语言笔记,还好没放弃??58个硬件面试题整理