1. volatile:易失性变量
- 该变量可能由于程序指令以外的原因被修改
- 变量被多个任务(中断ISR)共享;
- 变量代表硬件寄存器:
- 读写内容不同,多次访问不同,与访问顺序相关
- 对变量的访问会触发某些事件的发生
- 变量值可能由软件之外的原因发生不可预知的变化。
2.数据存储方式:
- 静态变量存储区:static变量以及全局变量,全局数组
- 堆栈:(stack,heap):中间结果中间数据存储在堆栈中。动态分配使用的公共区域:malloc()。堆栈在告诉SRAM区域,
对于堆栈使用避免堆栈溢出避免使用递归函数调用。auto变量要明确赋初值(在堆栈中会清空变量不会清除值)
例子:
以上代码存在着三个问题:
- img变量申请空间[4096]超出了堆栈的最大容量,会造成堆栈溢出,正常堆栈申请为200左右个字节,4096远超过堆栈的最大容量
- 在对指针*p定义的时候,没有赋初值,*p在堆栈中会得到一个堆栈的历史值,在后面的p=s1,等操作中,会出现错误,
- 堆栈在使用完毕后会自动释放内存,此时return img得不到该变量的值。
3.嵌入式软件生成过程
- 预处理:处理所有的#开头的文件,例如#define(替换)#include(展开)
- 编译:词法分析,语义分析,建立符号表,优化,对每个单独的c文件转为汇编文件
- 汇编:将汇编语句变为二进制文件,为计算机直接可执行文件,