打印

IAR软件在单片机复位初始阶段都做了些什么?

[复制链接]
2315|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weizhishijie|  楼主 | 2016-3-17 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 weizhishijie 于 2016-3-17 15:17 编辑

采用msp430f5659,在iar软件编译后,复位中断将程序指针指向oxABC0,至此之后的单片机都做了些什么操作,希望能详细讲解一下,感谢!


?cstart_begin:
__program_start:
00ABC0    4031 6400          mov.w   #0x6400,SP
?cstart_init_zero:
00ABC4    403C 2930          mov.w   #0x2930,R12
00ABC8    403D 0E39          mov.w   #0xE39,R13
00ABCC    13B2 3648          calla   #__data16_memzero
?cstart_init_copy:
00ABD0    403C 25F4          mov.w   #0x25F4,R12
00ABD4    403D A9F4          mov.w   #0xA9F4,R13
00ABD8    403E 01CC          mov.w   #0x1CC,R14
00ABDC    13B2 37DA          calla   #__data16_memcpy
?cstart_call_main:
00ABE0    13B2 1804          calla   #main
00ABE4    13B2 37EA          calla   #exit
   
         


__data16_memzero:
023648   4C0F               mov.w   R12,R15
02364A   5D0F               add.w   R13,R15
02364C   3C03               jmp     0x23654
02364E   43CC 0000          clr.b   0x0(R12)
023652   531C               inc.w   R12
023654   9F0C               cmp.w   R15,R12
023656   23FB               jne     0x2364E
023658   0110               reta


__data16_memcpy:
0237DA   0280 367E          bra     #memcpy
?IndCallR11:
0237DE   151B               pushm.w #2,R11
0237E0   0110               reta
           

相关帖子

沙发
comeon201208| | 2016-3-17 22:26 | 只看该作者
这汇编的就看不太懂了

使用特权

评论回复
板凳
51xlf| | 2016-3-17 22:56 | 只看该作者
楼主为什么要修改头文件?

使用特权

评论回复
地板
51xlf| | 2016-3-17 22:58 | 只看该作者
是要自己做boot吗?

使用特权

评论回复
5
harrig| | 2016-3-18 00:06 | 只看该作者
清内存,设置堆栈大小和指针

使用特权

评论回复
6
weizhishijie|  楼主 | 2016-3-18 09:39 | 只看该作者
51xlf 发表于 2016-3-17 22:56
楼主为什么要修改头文件?

实现通过GPRS升级软件程序,需要自己写boot,iar的初始部分有点看不懂。

使用特权

评论回复
7
Varus| | 2016-3-18 20:24 | 只看该作者
感觉应该是清除寄存器什么的

使用特权

评论回复
8
weizhishijie|  楼主 | 2016-3-21 13:35 | 只看该作者
harrig 发表于 2016-3-18 00:06
清内存,设置堆栈大小和指针

能否具体进行说明?
mov.w   #0x6400,SP   我理解为将堆栈指针指向地址0x6400。

#__data16_memzero 貌似为清理内存,具体地址范围和如何操作没搞清楚。

#__data16_memcpy 没看明白

另外,如果需要自己编写boot,也需要进行以上步骤吗?照搬就可以吗?

感谢!1

使用特权

评论回复
9
vivilzb1985| | 2016-3-21 20:02 | 只看该作者
这个看你的程序设置的啦

使用特权

评论回复
10
lefeng| | 2016-3-21 22:05 | 只看该作者
获取栈顶地址,初始化寄存器

使用特权

评论回复
11
weizhishijie|  楼主 | 2016-3-24 10:10 | 只看该作者
vivilzb1985 发表于 2016-3-21 20:02
这个看你的程序设置的啦

哪位可以详细解释一下啊?

使用特权

评论回复
12
tongbu2015| | 2016-3-24 16:14 | 只看该作者
这个主要是看我们初始化时候进行哪些操作的

使用特权

评论回复
13
wyp427521| | 2016-10-25 20:29 | 只看该作者
最近接触到这块,我个人理解是
#__data16_memzero为定义的全局变量开辟的内存空间,且给变量赋初值为0,或没赋初值,该全局变量一共定义了0xE39个字节。该定义在数据存储器起始地址为0x2930
#__data16_memcpy为定义的全局变量开辟的内存空间,该全局变量赋初值,该全局变量一共定义了0x1CC个字节。该定义在数据存储器起始地址为0x25F4,#0xA9F4该值为程序存储器存储赋值的全局变量起始地址

使用特权

评论回复
14
Varus| | 2016-10-25 21:19 | 只看该作者
清除内存,设置堆栈的吧

使用特权

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

本版积分规则

8

主题

23

帖子

0

粉丝