ARM与51编写程序的区别

(1) int变量 在51 占2个字节;在ARM占4个字节

 

(2)结构体对齐  在51是按照一个字节对齐; 在ARM是按结构体默认对齐规则对齐

 

(3)字节在内存的排列顺序   在51是大端  ; 在ARM大多数是小端,但有的可以大小端选择。 

在大端存储格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中

在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节

(大端,小端的堆栈方向不同,大端是向上生长,小端是向下生长)所以大端初始化的SP往往是地址低端,而小端初始化的SP往往是地址高端

(4)函数体中的局部变量,在C51中存放于一个可覆盖的(数据)段中的,而ARM是存放于堆栈中的。这样在(比如PC,比如ARM),函数重入的问题一般不是要特别注意的问题.只要你没有使用static变量,或者指向static变量的指针,一般情况下,ARM中函数自然而然地就是可重入的.但C51不一样,如果你不特别设计你的函数,它就是不可重入的.

(4) ARM的指令长度(或指针)一个字(32位),单片机指令长度(或指针)不定(1-3字节)

(5) ARM的空间统一编址,单片机的空间独立编址

(6) ARM没有bool变量,单片机可采用bit变量

   ARM中可采用 typedef enum(false,true) bool;

 

赋初值的ROM变量定位方法:

ARM方法: 
const u8 bootsoftver __at (0x8001000) =BOOT32_SOFTVER;

MC51方法:
 1.新建bootver.c文件
   unsigned char code version=BOOTVERSION;  //BOOT 固件版本 
 
 2.在BL51 Locate -- ?CO?BOOTVER(0xFD00)

 

主程序和中断调用同一函数

ARM编译后不显示告警;函数可重入

C51显示告警信息WARNING 15 (MULTIPLE CALL TO SEGMENT);函数不可重入

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值