Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
ARM cortex-a5移植碰到的tick问题
发布于 2019-09-02 20:34:06 浏览:2719
订阅该版
1. 最新code,gcc编译,ARM cortex-a5的核,启用了单核,参考了`bsp\qemu-vexpress-a9`的代码 2. 修改了其中的link.lds地址,GIC地址,drv_timer.c,serial.c,board.c的memory表等 3. rtthread_startup中调用rt_system_scheduler_start后进来第一个时钟中断,处理完成后正常执行到`start_gcc.S` `vector_irq`的line 232 位置的`subs pc, lr, #4`,此时查看lr寄存器的值为`rt_thread_timer_entry`的地址+4,单步执行后直接进入`ldr pc, _vector_dabt`。 不能进入app的main函数 串口打印: ``` > \ | / - RT - Thread Operating System / | \ 4.0.2 build Sep 2 2019 2006 - 2019 Copyright by rt-thread team hello rt-thread hello rt-thread:0 data abort:Execption: r00:0x00000000 r01:0xdeadbeef r02:0xdeadbeef r03:0xdeadbeef r04:0xdeadbeef r05:0xdeadbeef r06:0xdeadbeef r07:0xdeadbeef r08:0xdeadbeef r09:0xdeadbeef r10:0xdeadbeef fp :0xdeadbeef ip :0xdeadbeef sp :0xb8048b18 lr :0xb801b4b8 pc :0xb8027d64 cpsr:0x00000013 thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- tshell 20 running 0x00000044 0x00001000 03% 0x00000009 000 tidle0 31 ready 0x00000044 0x00000400 06% 0x00000020 000 timer 4 suspend 0x0000549c 0x00000400 48% 0x00000009 000 main 10 suspend 0x000000b4 0x00000800 34% 0x00000013 000 shutdown... (0) assertion failed at function:rt_hw_cpu_shutdown, line number:79 ``` 请教大神么,一般情况会是什么原因造成的?谢谢!
查看更多
21
个回答
默认排序
按发布时间排序
bernard
2019-09-02
这家伙很懒,什么也没写!
data abort了啊,lr :0xb801b4b8 pc :0xb8027d64,查上面这个
lindengyu
2019-09-03
这家伙很懒,什么也没写!
>data abort了啊,lr :0xb801b4b8 pc :0xb8027d64,查上面这个 --- 谢谢! `lr :0xb801b4b8`是:`rt_thread_exit` `pc :0xb8027d64`是:`rt_thread_timer_entry`的地址`+8` 在这两个函数中打断点,压根就没有执行到。 单步执行vector_irq的line 232 位置的 ``` subs pc, lr, #4, ``` 直接跳到了 ``` ldr pc, _vector_dabt。 ```
bernard
2019-09-03
这家伙很懒,什么也没写!
都能断点了,很不错的,那就单步一步步进行调试吧。 从上面看,可能的有两种, 1. 栈空间太小了,导致执行乱掉了; 2. 你在timer超时函数中做坏事了,例如去创建了一个什么对象。
bernard
2019-09-03
这家伙很懒,什么也没写!
唔,弄串了。应该不是"timer超时函数中做坏事了,例如去创建了一个什么对象。" 和另外一个贴弄串了。
lindengyu
2019-09-03
这家伙很懒,什么也没写!
>唔,弄串了。应该不是"timer超时函数中做坏事了,例如去创建了一个什么对象。 :lol,谢谢! 堆栈应该没有爆掉,应用代码还只是一个简单的main函数。 只是修改了timer,uart驱动以及硬件,memory地址等。 虽然可以单步执行,但是在执行subs pc, lr, #4时直接跳转了,都不知道哪句出错了。 ```c #define RT_NAME_MAX 8 #define RT_ALIGN_SIZE 4 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 #define RT_TICK_PER_SECOND 100 #define IDLE_THREAD_STACK_SIZE 1024 #define RT_TIMER_THREAD_PRIO 4 #define RT_TIMER_THREAD_STACK_SIZE 1024 #define RT_MAIN_THREAD_STACK_SIZE 2048 #define RT_MAIN_THREAD_PRIORITY 10 ```
bernard
2019-09-03
这家伙很懒,什么也没写!
把os tick中断先关闭了,看看会怎么样,shell是否可以使用
lindengyu
2019-09-03
这家伙很懒,什么也没写!
>把os tick中断先关闭了,看看会怎么样,shell是否可以使用 --- 关闭中断一样出错,`rt_system_scheduler_start`中执行`rt_hw_context_switch_to`到`rt_hw_context_switch_exit`时181行的 ``` ldmfd sp!, {r0-r12,lr,pc}^ ``` 时一样直接跳转到 ``` ldr pc, _vector_dabt ``` 了。 查看了sp的位置,里面保存的值,lr对应的是:rt_thread_exit,PC对应的是:rt_thread_timer_entry 又: 如果关闭tick中断,在不reset cpu的情况下,第二次调试的时候, ``` ldmfd sp!, {r0-r12,lr,pc}^ ``` 时的寄存器和sp的值一样,但是就可以进入`rt_thread_timer_entry`,但是后面还是会出错。
bernard
2019-09-03
这家伙很懒,什么也没写!
那就是移植的问题了。关闭os tick中断后,调试就容易多了,基本上想触发中断的时候才去触发(例如串口输入触发个中断),所以调试的路径也会很简单 lz加油
lindengyu
2019-09-04
这家伙很懒,什么也没写!
>那就是移植的问题了。关闭os tick中断后,调试就容易多了,基本上想触发中断的时候才去触发(例如串口输入 ... --- :'( 一共移植了3个驱动: 1. timer,现在中断也屏蔽了。 2. uart,现在也把uart打印和输入屏蔽了。 3. gic中断,只是返回了2个地址而已。 在这样的情况下,还是一样的rt_system_scheduler_start中执行rt_hw_context_switch_to到rt_hw_context_switch_exit时181行的ldmfd sp!, {r0-r12,lr,pc}^时一样直接跳转到ldr pc, _vector_dabt了。
bernard
2019-09-04
这家伙很懒,什么也没写!
你要仔细分析,仔细看的。目前cortex-a的移植默认是可以支持A9、A7。而A5则从来没对接过,good lucky!
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
lindengyu
这家伙很懒,什么也没写!
提问
1
回答
9
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
3
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
4
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
7
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
8
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
9
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
10
【内核学习营】+王秀峰+led_rgb
推荐文章
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在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
7
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
7
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
张世争
1
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
2
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部