查看: 8218|回复: 8

[求助] 程序存储区和PC指针的问题

[复制链接]

该用户从未签到

12

主题

32

帖子

0

新手上路

Rank: 1

积分
105
最后登录
1970-1-1
发表于 2011-7-22 09:46:09 | 显示全部楼层 |阅读模式
K60数据存放到程序存储区是不是就是指定一个地址,地址在Flash地址空间: 0x00000000--0x00080000里就可以了?K60的启动是不是从0x00000000开始启动?PC指针的跳转是用什么指令实现的?如果我在0x00000000处开始写入一个程序,再从0x00020000写入一个程序,我在第一个程序的最后把PC指针跳转到0x00020000是否就能实现第二个程序的运行?
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

12

主题

32

帖子

0

新手上路

Rank: 1

积分
105
最后登录
1970-1-1
 楼主| 发表于 2011-7-27 16:25:27 | 显示全部楼层

RE:程序存储区和PC指针的问题

MC_SRSH[SW]手册上写的是表明是不是软件复位的,怎么来切换程序入口呢?还有这个SCB_AIRCR我怎么在我的手册里没搜索到呢?
回复 支持 0 反对 1

使用道具 举报

该用户从未签到

12

主题

32

帖子

0

新手上路

Rank: 1

积分
105
最后登录
1970-1-1
 楼主| 发表于 2011-7-25 08:26:35 | 显示全部楼层

回复:程序存储区和PC指针的问题

是我问的有不清楚的地方吗?怎么没人回答啊

该用户从未签到

2

主题

18

帖子

0

新手上路

Rank: 1

积分
76
最后登录
1970-1-1
发表于 2011-7-25 15:02:52 | 显示全部楼层

RE:程序存储区和PC指针的问题

0x00000000处放置的是堆栈起始地址;
0x00000004处存放的是PC指针,可以是标号
也就是开机上电后,把0x00000000出的内容给SP,把0x00000004处的内容给PC,然后就从那个地址开始执行指令了。
0x00000000    0x20010000   ;堆栈起始位置在RAM最顶端
0x00000004    __startup    ;第一条指令在__startup标号处
0x00000008

该用户从未签到

12

主题

32

帖子

0

新手上路

Rank: 1

积分
105
最后登录
1970-1-1
 楼主| 发表于 2011-7-27 09:03:58 | 显示全部楼层

RE:程序存储区和PC指针的问题

能设置程序运行的开始地址后复位,然后重设置的这个地址开始运行吗?比如我设置开始地址为0X00000200,然后软件复位,复位后程序不重0X00000000处启动而是从0X00000200处启动。这样的方式能实现吗?

该用户从未签到

2

主题

18

帖子

0

新手上路

Rank: 1

积分
76
最后登录
1970-1-1
发表于 2011-7-27 11:16:26 | 显示全部楼层

RE:程序存储区和PC指针的问题

如果我在0x00000000处开始写入一个程序,再从0x00020000写入一个程序,我在第一个程序的最后把PC指针跳转到0x00020000是否就能实现第二个程序的运行?
-----------------------------------------------------------
我觉得这个方法应该是是可行的吧,利用编译器的代码块定位功能把第二个程序块定位到0x00020000,然后在第一个程序块后面直接跳转到0x00020000不就行了。
--
比如IAR里用#pragma location=xxx 或者@定位,跳转的话可以用
asm(" B _second") _second是标号,代表第二个程序段的起始地址。
自己的理解

该用户从未签到

2

主题

224

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
322
最后登录
1970-1-1
发表于 2011-7-27 16:07:22 | 显示全部楼层

RE:程序存储区和PC指针的问题

软复位之后,CPU一定还是从0地址启动。
经过必要初始化后,可以通过判断MC_SRSH[SW]来切换实际程序入口。
软复位指令:(具体请参考ARM相关手册)
    SCB_AIRCR = 0x05FA0000 | SCB_AIRCR_SYSRESETREQ_MASK;
    asm("DSB");

该用户从未签到

2

主题

224

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
322
最后登录
1970-1-1
发表于 2011-7-27 19:24:25 | 显示全部楼层

RE:程序存储区和PC指针的问题

我觉得我说得挺清楚了。。。
好吧,换个说法:
if(MC_SRSH[SW])
    goto/jump/call 第二个入口;
至于SCB,我说的是请查阅ARM相关手册,请移步至www.arm.com。

该用户从未签到

2

主题

53

帖子

0

新手上路

Rank: 1

积分
20
最后登录
1970-1-1
发表于 2011-7-27 23:16:09 | 显示全部楼层

回复:程序存储区和PC指针的问题

可以的。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 16:46 , Processed in 0.101310 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表