查看: 3100|回复: 0

ARM处理器与51单片机在编写程序上有什么区别吗?

[复制链接]
发表于 2017-6-2 09:59:57 | 显示全部楼层 |阅读模式
关键词: arm , 单片机 , 编程
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不一样,如果你不特别设计你的函数,它就是不可重入的.

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

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

(7) 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);函数不可重入


想要了解嵌入式物联网相关技术的可以联系宋工企鹅号三五二四六五九零八八
Tel:173--1795--1908
免费试听C语言电子PCBSTM32LinuxFPGA、JAVA、安卓等。
想学习的你和我联系预约就可以免费听课了。

4.jpg


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表