Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ARMv8
RK瑞芯微_Rockchip
5
rk3399移植遇到的问题
发布于 2021-09-07 21:36:10 浏览:1569
订阅该版
目前只有main线程和idle线程,main线程调用rt_thread_delay函数导致系统卡死 ```C int main(int argc, char** argv) { rt_tick_t current_tick; rt_kprintf("Hi, this is RT-Thread!!\n"); while (1) { current_tick = rt_tick_get(); rt_kprintf("%d\r\n", current_tick); rt_thread_delay(100); } return 0; } ``` 最终确认在rt_hw_context_switch函数卡死 ```C rt_kprintf("rt_hw_context_switch start!\r\n"); rt_hw_context_switch((rt_ubase_t)&from_thread->sp, (rt_ubase_t)&to_thread->sp); rt_kprintf("rt_hw_context_switch end!\r\n"); ``` 这个函数实现如下 ```C .globl rt_hw_context_switch rt_hw_context_switch: MOV X8,X0 MOV X9,X1 //SAVE_CONTEXT_T /* Switch to use the EL0 stack pointer. */ MSR SPSEL, #0 //MSR SPSEL, #1 /* Save the entire context. */ STP X0, X1, [SP, #-0x10]! STP X2, X3, [SP, #-0x10]! STP X4, X5, [SP, #-0x10]! STP X6, X7, [SP, #-0x10]! STP X8, X9, [SP, #-0x10]! STP X10, X11, [SP, #-0x10]! STP X12, X13, [SP, #-0x10]! STP X14, X15, [SP, #-0x10]! STP X16, X17, [SP, #-0x10]! STP X18, X19, [SP, #-0x10]! STP X20, X21, [SP, #-0x10]! STP X22, X23, [SP, #-0x10]! STP X24, X25, [SP, #-0x10]! STP X26, X27, [SP, #-0x10]! STP X28, X29, [SP, #-0x10]! STP X30, XZR, [SP, #-0x10]! MRS X0, CurrentEL CMP X0, 0xc B.EQ 3f CMP X0, 0x8 B.EQ 2f CMP X0, 0x4 B.EQ 1f B . 3: MRS X3, SPSR_EL3 MOV X2, X30 B 0f 2: MRS X3, SPSR_EL2 MOV X2, X30 B 0f 1: MRS X3, SPSR_EL1 MOV X2, X30 B 0f 0: STP X2, X3, [SP, #-0x10]! MOV X0, SP /* Move SP into X0 for saving. */ /* Switch to use the ELx stack pointer. */ MSR SPSEL, #1 STR X0, [X8] // store sp in preempted tasks TCB LDR X0, [X9] // get new task stack pointer // RESTORE_CONTEXT /* Switch to use the EL0 stack pointer. */ MSR SPSEL, #0 //MSR SPSEL, #1 /* Set the SP to point to the stack of the task being restored. */ MOV SP, X0 LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */ MRS X0, CurrentEL CMP X0, 0xc B.EQ 3f CMP X0, 0x8 B.EQ 2f CMP X0, 0x4 B.EQ 1f B . 3: MSR SPSR_EL3, X3 MSR ELR_EL3, X2 B 0f 2: MSR SPSR_EL2, X3 MSR ELR_EL2, X2 B 0f 1: MSR SPSR_EL1, X3 MSR ELR_EL1, X2 B 0f 0: LDP X30, XZR, [SP], #0x10 LDP X28, X29, [SP], #0x10 LDP X26, X27, [SP], #0x10 LDP X24, X25, [SP], #0x10 LDP X22, X23, [SP], #0x10 LDP X20, X21, [SP], #0x10 LDP X18, X19, [SP], #0x10 LDP X16, X17, [SP], #0x10 LDP X14, X15, [SP], #0x10 LDP X12, X13, [SP], #0x10 LDP X10, X11, [SP], #0x10 LDP X8, X9, [SP], #0x10 LDP X6, X7, [SP], #0x10 LDP X4, X5, [SP], #0x10 LDP X2, X3, [SP], #0x10 LDP X0, X1, [SP], #0x10 /* Switch to use the ELx stack pointer. _RB_ Might not be required. */ MSR SPSEL, #1 ERET ``` 感觉没啥大问题,实在是不会改了,有大神指导一下嘛
查看更多
2
个回答
默认排序
按发布时间排序
bigmagic
2021-09-08
这家伙很懒,什么也没写!
看样子应该是aarch64架构,能够进入main函数,说明`rt_hw_context_switch_to`的函数移植正确,在`main`函数中切换任务,调用`rt_hw_context_switch`,实际上底层逻辑是保存当前main函数现场,恢复rtos在初始化阶段对构造的线程的默认初值。要想分析准确的问题点,需要理解压栈与出栈的成对出现。结合`rt_hw_stack_init`与`rt_hw_context_switch`,成对分析,才能定位问题。
pinxue
2021-09-08
这家伙很懒,什么也没写!
RK3399 是 2x A72 + 4x A53,跟 Raspberry Pi 4 比较像的。这个已经有支持了,你可以参考 https://gitee.com/rtthread/rt-thread/tree/gitee_master/libcpu/aarch64/common 和 https://gitee.com/rtthread/rt-thread/tree/master/bsp/raspberry-pi
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
Eutopia
这家伙很懒,什么也没写!
提问
5
回答
3
被采纳
0
关注TA
发私信
相关问题
1
armv8 下start汇编中sp堆栈指针为什么设置为_start入口函数地址
2
armv8a移植遇到的问题。
3
是否有标准的系统稳定性方面的测试方法?
4
请问RT-Thread支持ARMv8这种多核架构了吗?
5
RT-Thread 移植到双核A53
6
A53 架构, entry_point.S 为什么是运行再el3 特权级别?
7
移植RTThread多核如何开始(ZYNQ US 64位 A53)?求指引
8
GICV2 IGROUP 初始化
9
arm a53架构 调试rt-thread
10
GDB调试QEMU卡死
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
NXP MCXN947开箱照
2
基于FRDM-MCXN94的TFT模块评测
3
FRDM-MCXN947 Flash实践----使用RTT fal组件
4
RTT下的I2C框架
5
【学习分享】libc的版本探测
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
PWM
潘多拉开发板_Pandora
定时器
ADC
BSP
中断
编译报错
socket
keil_MDK
GD32
MicroPython
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
flashDB
本月问答贡献
用户名由3_15位
17
个答案
3
次被采纳
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
32
个答案
1
次被采纳
梦笑真美
20
个答案
1
次被采纳
本月文章贡献
比特饼干
2
篇文章
6
次点赞
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
xusiwei1236
2
篇文章
3
次点赞
yinxiangxv
2
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部