Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
keil_MDK
Start_rvds.s 一点修改
发布于 2009-12-28 16:26:31 浏览:3738
订阅该版
在sam7x的启动代码里面我看到开了三个栈,svc irq 和usr,各256字节。但是在最后的这里有个问题,红色的字是被注掉了,原先这里要进入usr模式设置sp寄存器的,现在停留在svc模式,但是下面的sp设置却保留了,也就是说设置了两次svc的sp,后一次指向usr模式栈地址。简单的看来就是浪费掉256bytes,其实仔细想想这里应该是不需要给usr模式设置栈地址的。 ``` ; Enter Supervisor Mode and set its Stack Pointer MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #SVC_Stack_Size ; Enter User Mode and set its Stack Pointer ; MSR CPSR_c, #Mode_USR IF [s:154]EF:__MICROLIB EXPORT __initial_sp ELSE MOV SP, R0 SUB SL, SP, #USR_Stack_Size ENDIF ``` 单这边修改还不够,下面的__user_initial_stackheap 段代码也要做对应修改,否则在__main里面还会把地址置回去。 ``` __user_initial_stackheap LDR R0, = Heap_Mem LDR R1, =(Stack_Mem + USR_Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR ENDIF ``` 题外话 我跟踪到`__main`的`__user_setup_stackheap`函数发现其中有个奇怪的地方,拿出来讨论一下 这个函数地址在这里,是个库函数 ``` __user_setup_stackheap 0x00103d34 ARM Code 96 sys_stackheap_outer.o(.text) ``` 找不到代码,只好跟踪汇编 ``` __user_setup_stackheap: 0x00103D34 E1A0500E MOV R5,R14 0x00103D38 EB000018 BL 0x00103DA0 0x00103D3C E1A0E005 MOV R14,R5 0x00103D40 E1B05000 MOVS R5,R0 0x00103D44 E1A0100D MOV R1,R13 0x00103D48 E1A0300A MOV R3,R10 0x00103D4C E3C00007 BIC R0,R0,#0x00000007 0x00103D50 E1A0D000 MOV R13,R0 0x00103D54 E28DD060 ADD R13,R13,#0x00000060 0x00103D58 E92D4020 STMDB R13!,{R5,R14} 0x00103D5C EBFFFCE4 BL __user_initial_stackheap(0x001030F4) 0x00103D60 E8BD4020 LDMIA R13!,{R5,R14} 0x00103D64 E3A06000 MOV R6,#global_variable(0x00000000) 0x00103D68 E3A07000 MOV R7,#global_variable(0x00000000) 0x00103D6C E3A08000 MOV R8,#global_variable(0x00000000) 0x00103D70 E3A0B000 MOV R11,#global_variable(0x00000000) 0x00103D74 E3C11007 BIC R1,R1,#0x00000007 0x00103D78 E1A0C005 MOV R12,R5 0x00103D7C E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00103D80 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00103D84 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00103D88 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00103D8C E1A0D001 MOV R13,R1 0x00103D90 E12FFF1E BX R14 exit: 0x00103D94 0004 LSL R4,R0,#0 0x00103D96 46C0 NOP 0x00103D98 46C0 NOP 0x00103D9A 0020 LSL R0,R4,#0 0x00103D9C F7FC BL $Ven$TA$I$$__rt_exit(0x001002CC) - Part #1 0x00103D9E FA96 BL $Ven$TA$I$$__rt_exit(0x001002CC) - Part #2 0x00103DA0 E59F0000 LDR R0,[PC] 0x00103DA4 E12FFF1E BX R14 0x00103DA8 00200534 DD 0x00200534 ``` 这里一开始把`0x200534`载入`R0`,继而载入`R13`,然后压栈的两个寄存器,这时候的R13地址不在合法的栈地址内,查map发现在这里 ``` __libspace_start 0x00200534 Data 96 libspace.o(.bss) ``` 我猜想这个过程应该是把这部分数据拿来当个临时堆栈用了一下,因为这时候stack还没设置,不知道是不是这么个意思。 抛个砖先 :)
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
3.7k
关于作者
mbbill
这家伙很懒,什么也没写!
提问
3
回答
43
被采纳
0
关注TA
发私信
相关问题
1
请问rtt-studio工程如何转为MDK工程?
2
时间片视频教程移植,时间片功能不起作用是什么情况
3
使用env生成keil5工程,怎么添加全局宏?
4
Rtthread-studio编译报错
5
cubemx配置keil正常输出stdio输出不了PWM寄存器的值仿真一样?
6
RTT-Studio生成的工程,子目录没有SConscript文件
7
通过ENV生成的MDK5工程,为什么默认的启动文件是context_gcc.S呢
8
试用了一下liteos,我又回来啦
9
在applications文件夹下添加了新的.c/.h文件后无法生成MDK5工程
10
pandora开发板使用cjson,内存不足。
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部