Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rtthread mini2440 tick怎么启动的?
发布于 2011-03-30 14:53:56 浏览:8215
订阅该版
调式发现,虽然pwm timer4的clock 开启, interrupt umask,timer4 start bit也设置了 但是一直到 rtthread_startup() ------------------> rt_system_scheduler_start() | | ---> rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp); | |-> static void rt_thread_timer_entry(void* parameter) | |-> rt_sem_take(&timer_sem,RT_WAITING_FOREVER); 这事PWM Timer4的中断才可以进入到中断例程里,但是又不知道是那里开启了中断? 问题是ARM的中断在start_gcc.S中就全部disable了,然后使用 rt_hw_interrupt_enable(temp);开启阿, 在 sem_take中没有找到什么特别的设置。 那么rtthread在何时开启了tick?
查看更多
10
个回答
默认排序
按发布时间排序
visitor83
2011-04-01
这家伙很懒,什么也没写!
我没说清楚,问题是,PWM Timer4中断开启,并启动了,但直到rt_system_scheduler_start() 中断才可以进到中断vector_irq中,这是为什么。请高手指点,谢谢。
aozima
2011-04-01
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
切换到第一个线程时才打开中断,另调度器都没启动要TICK做什么。
visitor83
2011-04-01
这家伙很懒,什么也没写!
当然知道,第一个线程不起来要tick没什么必要,但是,没有找到开启中断的代码 在rtthread-0.4.0,所以才困惑!你知道那段代码开启?
visitor83
2011-04-01
这家伙很懒,什么也没写!
第一个进程是idle ``` void rt_thread_idle_init() { /* init thread */ rt_thread_init(&idle, "tidle", rt_thread_idle_entry, RT_NULL, &rt_thread_stack[0], sizeof(rt_thread_stack), RT_THREAD_PRIORITY_MAX - 1, 32); /* startup */ rt_thread_startup(&idle); } ``` 然后进入到 rt_system_scheduler_start();先查找优先级最高的进程,idle,在进入上下文切换的汇编代码。 ``` /* * void rt_hw_context_switch_to(rt_uint32 to); * r0 --> to */ .globl rt_hw_context_switch_to rt_hw_context_switch_to: ldr sp, [r0] @ get new task stack pointer ldmfd sp!, {r4} @ pop new task spsr msr spsr_cxsf, r4 ldmfd sp!, {r4} @ pop new task cpsr msr cpsr_cxsf, r4 ldmfd sp!, {r0-r12, lr, pc} @ pop new task r0-r12, lr & pc ``` 将保存的新进程的stack pop出去,并将pc指针定位到新的进程开始执行,你知道在那里开启中断, 不胜感谢,计划rtthread移植到新的平台下,所以拿2440先study下整个流程,谢谢。
bernard
2011-04-01
这家伙很懒,什么也没写!
>**切换到第一个线程时才打开中断**,另调度器都没启动要TICK做什么。 --- 线程第一次运行时,它的上下文就是开启中断状态的。
visitor83
2011-04-01
这家伙很懒,什么也没写!
楼主正解,代码里也是这样的,打开IRQ_DEBUG,一直到rt_system_scheduler_start(); 才有中断的debug输出,所以很困惑。
visitor83
2011-04-02
这家伙很懒,什么也没写!
明白了! 线程第一次运行,它的默认上下文环境就是开启中断的,那么当这个线程被恢复时,那么系统中断不就立刻被打开了么 <<问题的关键是: 1。每一个进程都有自己的空间互不干扰。 进程被os恢复时,等于从进程的第一条指令开始执行,与其他什么乱七八糟的没什么关系。 2。 ARM Mode 的切换, rtthread 启动后一直是处于svc mode下,CPSR的F, I bit一直都是1,所以arm920t core的irq, fiq全部都是disable的。即使Interrupt register打开也没有用。 3。 第一次切换进程时的恢复上下文的设置。 ``` stk = (rt_uint32_t*)stack_addr; *(stk) = (rt_uint32_t)tentry; /* entry point */ *(--stk) = (rt_uint32_t)texit; /* lr */ *(--stk) = 0; /* r12 */ *(--stk) = 0; /* r11 */ *(--stk) = 0; /* r10 */ *(--stk) = 0; /* r9 */ *(--stk) = 0; /* r8 */ *(--stk) = 0; /* r7 */ *(--stk) = 0; /* r6 */ *(--stk) = 0; /* r5 */ *(--stk) = 0; /* r4 */ *(--stk) = 0; /* r3 */ *(--stk) = 0; /* r2 */ *(--stk) = 0; /* r1 */ *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ *(--stk) = SVCMODE; /* cpsr */ *(--stk) = SVCMODE; /* spsr */ ``` 下面的SVCMODE = 0x13,那么其实CPSR register中F, I bit 已经被打开了,所以说进程一进去就可以执行。
visitor83
2011-04-02
这家伙很懒,什么也没写!
忘了,感谢bernard的指教。上述有什么不对,还请各位指点!
bernard
2011-04-02
这家伙很懒,什么也没写!
[s:175] 终于明白了啊,这个是很多人说不理解的。有时间你更新到本站的wiki中吧,由学习者来更新是最恰当的,这样就知道学习者碰到了什么问题,然后RT-Thread又是如何解决的。
撰写答案
登录
注册新账号
关注者
0
被浏览
8.2k
关于作者
visitor83
这家伙很懒,什么也没写!
提问
5
回答
16
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
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
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部