Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
cortex-A
SMP
关于cortex-a9多核情况下interrupt_disable定义
发布于 2019-03-23 22:03:54 浏览:3351
订阅该版
首先申明下,我整准备把rtt3.0移植到imx6q上,别问为什么不用LINUX :lol 在rhtw.h中 ```c #ifdef RT_USING_SMP rt_base_t rt_hw_local_irq_disable(); void rt_hw_local_irq_enable(rt_base_t level); #define rt_hw_interrupt_disable rt_cpus_lock #define rt_hw_interrupt_enable rt_cpus_unlock ``` 在cpu.c中,调用了rt_hw_local_irq_enable ```c rt_base_t rt_cpus_lock(void) { rt_base_t level; struct rt_cpu* pcpu; level = rt_hw_local_irq_disable(); pcpu = rt_cpu_self(); if (pcpu->current_thread != RT_NULL) { if (pcpu->current_thread->cpus_lock_nest++ == 0) { pcpu->current_thread->scheduler_lock_nest++; rt_hw_spin_lock(&_cpus_lock); } } return level; } RTM_EXPORT(rt_cpus_lock); /** * This function will restore all cpus's scheduler and restore local irq. */ void rt_cpus_unlock(rt_base_t level) { struct rt_cpu* pcpu = rt_cpu_self(); if (pcpu->current_thread != RT_NULL) { if (--pcpu->current_thread->cpus_lock_nest == 0) { pcpu->current_thread->scheduler_lock_nest--; rt_hw_spin_unlock(&_cpus_lock); } } rt_hw_local_irq_enable(level); ``` 但是rt_hw_local_irq_enable并没有明确定义,只是在`context-gcc.s`中又写了一句 ```c #ifdef RT_USING_SMP #define rt_hw_interrupt_disable rt_hw_local_irq_disable #define rt_hw_interrupt_enable rt_hw_local_irq_enable #endif ``` 然后这汇编中呢又定义了rt_hw_interrupt_disable、rt_hw_interrupt_enable,和上面两个文件产生了冲突,因为rthw.h、cpu.c两个文件作为内核文件时必须调用的,而context.s除非被放弃,这时候就得想法子去定义下rt_hw_local_irq_disable、rt_hw_local_irq_enable,这个地方很困惑,有作者来解答么? ```c rt_hw_interrupt_disable: mrs r0, cpsr cpsid i bx lr /* * void rt_hw_interrupt_enable(rt_base_t level); */ rt_hw_interrupt_enable: msr cpsr, r0 bx lr ```
查看更多
10
个回答
默认排序
按发布时间排序
yqiu
2019-03-24
这家伙很懒,什么也没写!
关于 RT-Thread CPU 移植,建议参考下 - [内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting.md) 另外,RT-Thread 4.0 以上已经支持 cortex-a9 多核,可以参考这个 BSP, - https://github.com/RT-Thread/rt-thread/tree/master/bsp/qemu-vexpress-a9
bernard
2019-03-24
这家伙很懒,什么也没写!
建议切换到RT-Thread v4.x去,或者直接使用github上的master [https://github.com/RT-Thread/rt-thread](https://github.com/RT-Thread/rt-thread) 可以在github上多关注,也点下star哈
hwx628
2019-03-24
这家伙很懒,什么也没写!
>建议切换到RT-Thread v4.x去, 最新版直接DOWNLOAD的话,好像只有BSP文件夹,不完整; 而且我参考的就是a9多核的context-gcc.S但是里边并没有关于多核rt_hw_local_irq_enable/disable的定义,无论是汇编或者是C,看来是要自己写了
hwx628
2019-03-24
这家伙很懒,什么也没写!
>关于 RT-Thread CPU 移植,建议参考 最新版直接DOWNLOAD的话,好像只有BSP文件夹,不完整; 而且我参考的就是a9多核的context-gcc.S但是里边并没有关于多核rt_hw_local_irq_enable/disable的定义,无论是汇编或者是C,看来是要自己写了
hwx628
2019-03-24
这家伙很懒,什么也没写!
```c #ifdef RT_USING_SMP #define rt_hw_interrupt_disable rt_hw_local_irq_disable #define rt_hw_interrupt_enable rt_hw_local_irq_enable #endif ``` 这一句定义很不合理吧
bernard
2019-03-25
这家伙很懒,什么也没写!
多核下,不再有汇编实现的rt_hw_interrupt_disable,而是由C代码中的rt_hw_interrupt去调用其他API。 而多核下,本地CPU的中断开关由rt_hw_local_irq_disable/enable来取代。
hwx628
2019-03-25
这家伙很懒,什么也没写!
那这些本地CPU的中断开关就得自己实现么? 代码里边好像没有 是目前还不支持cortexa9多核的本地CPU的中断开关么?:P
yqiu
2019-03-25
这家伙很懒,什么也没写!
>最新版直接DOWNLOAD的话,好像只有BSP文件夹,不完整; 你没有正确下载吧,github 上最新版都是齐全的。
bernard
2019-03-25
这家伙很懒,什么也没写!
qemu上就支持多核的,把这个这样定义了,相当于把原来的rt_hw_interrupt_disable重命名成rt_hw_local_irq_disable的接口了。 所以参考qemu的实现即可。
shjic
2019-06-14
这家伙很懒,什么也没写!
>那这些本地CPU的中断开关就得自己实现么? 本地cpu的中断开关不需要自己实现, 只是如bernard所说被改名成了rt_hw_local_irq_xxx, 原因是原来单核实现中的rt_hw_interrupt_xxx是为了防止操作被打断而出现临界区错误, 这在单核中用关中断就可以简单实现, 而在多核中只关本地cpu的中断是不够的, 因为另一个cpu依然可以进入临界区, 为了实现单核时同样的防重入效果, 需要有禁止第二个cpu进入的手段, 所以现在的rt_hw_interrupt_xxx是使用spin_lock的方式去实现的. 这样原来的代码不用改就可以正常运行.
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
hwx628
这家伙很懒,什么也没写!
提问
5
回答
12
被采纳
0
关注TA
发私信
相关问题
1
aarch64有计划支持SMP吗
2
SMP重新定义中断处理函数的问题
3
rt_tick_increase()在SMP时只增加当前核的TICK?
4
RISCV smp系统调度异常问题请教
5
qemu-vexpress-a9 在SMP情况下GDB无法调试
6
为什么在k210上使用多核smp总是会卡死
7
RT-Thread SMP核弹碰撞树莓派
8
请教多核SMP功能验证
9
明年开始玩SMP多核处理器
10
建议RT-Thread支持SMP
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部