打印

ARM与51编写程序的区别

[复制链接]
1686|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王大熊|  楼主 | 2015-5-27 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试环境:KEIL
(1) int变量 在51 占2个字节;在ARM占4个字节



沙发
王大熊|  楼主 | 2015-5-27 09:38 | 只看该作者
(2)结构体对齐  在51是按照一个字节对齐; 在ARM是按结构体默认对齐规则对齐

使用特权

评论回复
板凳
王大熊|  楼主 | 2015-5-27 09:40 | 只看该作者
(3)字节在内存的排列顺序   在51是大端  ; 在ARM大多数是小端,但有的可以大小端选择。
  在大端存储格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
  在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
  (大端,小端的堆栈方向不同,大端是向上生长,小端是向下生长)所以大端初始化的SP往往是地址低端,而小端初始化的SP往往是地址高端

使用特权

评论回复
地板
王大熊|  楼主 | 2015-5-27 09:40 | 只看该作者
(4)函数体中的局部变量,在C51中存放于一个可覆盖的(数据)段中的,而ARM是存放于堆栈中的。这样在(比如PC,比如ARM),函数重入的问题一般不是要特别注意的问题.只要你没有使用static变量,或者指向static变量的指针,一般情况下,ARM中函数自然而然地就是可重入的.但C51不一样,如果你不特别设计你的函数,它就是不可重入的.

使用特权

评论回复
5
王大熊|  楼主 | 2015-5-27 09:40 | 只看该作者
(4) ARM的指令长度(或指针)一个字(32位),单片机指令长度(或指针)不定(1-3字节)

使用特权

评论回复
6
王大熊|  楼主 | 2015-5-27 09:41 | 只看该作者
(5) ARM的空间统一编址,单片机的空间独立编址
(6) ARM没有bool变量,单片机可采用bit变量
ARM中可采用 typedef enum(false,true) bool;

使用特权

评论回复
7
王大熊|  楼主 | 2015-5-27 09:41 | 只看该作者
赋初值的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)

使用特权

评论回复
8
王大熊|  楼主 | 2015-5-27 09:41 | 只看该作者
主程序和中断调用同一函数

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

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

使用特权

评论回复
9
vivilzb1985| | 2015-6-8 19:53 | 只看该作者
字节在内存的排列顺序   在51是大端  ; 在ARM大多数是小端,但有的可以大小端选择。

使用特权

评论回复
10
shenmu2012| | 2015-6-10 19:34 | 只看该作者
这个字节上的区别是最基本的。

使用特权

评论回复
11
deliciouscook| | 2015-6-19 09:56 | 只看该作者
函数体中的局部变量,在C51中存放于一个可覆盖的(数据)段中的,而ARM是存放于堆栈中的。这个是值得注意的,51和ARM在这些细微处的区别。

使用特权

评论回复
12
王大熊|  楼主 | 2015-6-22 09:39 | 只看该作者
vivilzb1985 发表于 2015-6-8 19:53
字节在内存的排列顺序   在51是大端  ; 在ARM大多数是小端,但有的可以大小端选择。  ...

哪种芯片可以呢?可以说说么?

使用特权

评论回复
13
32021724| | 2016-1-27 15:32 | 只看该作者
原来ARM不显示函数重复调用的警告是因为ARM开辟了堆栈区
受教了
正在发愁ISR和主循环同时访问同一个SPI或者I2C外设,导致外设卡死的问题

使用特权

评论回复
14
tongbu2015| | 2016-1-27 21:04 | 只看该作者
王大熊 发表于 2015-5-27 09:40
(4)函数体中的局部变量,在C51中存放于一个可覆盖的(数据)段中的,而ARM是存放于堆栈中的。这样在(比如PC, ...

这个是显而易见的区别的,局部变量存放的地方是不一样的。

使用特权

评论回复
15
smilingangel| | 2016-2-20 17:21 | 只看该作者
51基本是全都自己的编写代码的,ARM是随时可以掉用内部已有的函数库的。

使用特权

评论回复
16
tongbu2015| | 2016-2-20 21:20 | 只看该作者
这两者载体的差别大了去了,,真实的用过的都有体会的。

使用特权

评论回复
17
zhangbo1985| | 2016-2-22 13:38 | 只看该作者
这个首先是在操作字节上都有区别的。

使用特权

评论回复
18
baimiaocun2015| | 2016-2-22 22:41 | 只看该作者
王大熊 发表于 2015-5-27 09:40
(3)字节在内存的排列顺序   在51是大端  ; 在ARM大多数是小端,但有的可以大小端选择。
  在大端存储格式 ...

这个大小端数据格式的也是需要注意的。

使用特权

评论回复
19
bboo| | 2016-2-24 08:56 | 只看该作者
用C语言差别应该不是太大吧

使用特权

评论回复
20
bboo| | 2016-2-24 08:57 | 只看该作者
主要还是资源的多少不同

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

236

帖子

0

粉丝