adwmshanghai12
adwmshanghai12
This guy hasn't written anything yet

注册于 3 years ago

回答
4
文章
0
关注者
0

定时器本身就是间隔若干个tick执行一次,这本身就是延时执行,所以在一个好的设计中,定时器函数里面是不允许sleep的。

timer list使用自旋锁保证互斥访问

hrtimer机制,线程时间片不基于tick,可实现us延时

rt_object_init这一段代码要用_cpus_lock,不能用critical lock

可使用全局变量指针, 动态分配对象。

shjic 发表于 2019-11-15 10:20
在多核的版本可以用rt_hw_interrupt_disable/eanble函数把它们和rt_schedule封闭起来


:loveliness: 是的,用rt_hw_interrupt_disable做互斥可以fix

shjic 发表于 2019-11-15 10:15
是这样,这个问题的本质是因为释放是在idle中做,而由于历史原因之前认为idle执行时,其他任务已经停止,但 ...


嗯 谢谢分析和反馈:handshake

嗯,单核情况如此,不会有问题。多核下可能一个核通过idle释放了句柄,另一个核(当前正在执行rt_thread_exit)可能会在句柄释放后, 继续往下执行rt_schedule,从而出现这个问题。

谢谢指点,我再分析一下。:lol

谢谢qz_rtt的解答! 设当前线程为A,若就绪队列中存在与当前线程优先级相同的线程(设为线程B),rt_schedule()还是会切到线程B吧?:D

一样可以的,全局变量和函数一样,都在symbol table里面,会被dlmodule解析出来并保存。

回到
顶部

发布
问题

投诉
建议