嵌入式系统ARM处理器的C语言程序

1. volatile:易失性变量

  • 该变量可能由于程序指令以外的原因被修改
  • 变量被多个任务(中断ISR)共享;
  • 变量代表硬件寄存器:
  1.  读写内容不同,多次访问不同,与访问顺序相关
  2. 对变量的访问会触发某些事件的发生
  3. 变量值可能由软件之外的原因发生不可预知的变化。

2.数据存储方式:

  • 静态变量存储区:static变量以及全局变量,全局数组
  • 堆栈:(stack,heap):中间结果中间数据存储在堆栈中。动态分配使用的公共区域:malloc()。堆栈在告诉SRAM区域,

 

    对于堆栈使用避免堆栈溢出避免使用递归函数调用。auto变量要明确赋初值(在堆栈中会清空变量不会清除值)

例子:

 以上代码存在着三个问题:

  1. img变量申请空间[4096]超出了堆栈的最大容量,会造成堆栈溢出,正常堆栈申请为200左右个字节,4096远超过堆栈的最大容量
  2. 在对指针*p定义的时候,没有赋初值,*p在堆栈中会得到一个堆栈的历史值,在后面的p=s1,等操作中,会出现错误,
  3. 堆栈在使用完毕后会自动释放内存,此时return img得不到该变量的值。

3.嵌入式软件生成过程

  1. 预处理:处理所有的#开头的文件,例如#define(替换)#include(展开)
  2. 编译:词法分析,语义分析,建立符号表,优化,对每个单独的c文件转为汇编文件
  3. 汇编:将汇编语句变为二进制文件,为计算机直接可执行文件,

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值