社区闲人
发表于 2024-3-26 18:18:04
强烈反对在STC32上增加PendSv 中断。这个没有性能提升优势,反而原有中断的响应下降。
LAOXU
发表于 2024-3-26 18:21:11
1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
答: 采用定时器 0 (模式 3) , 才能保证 关闭总中断, OS 切换任务能正常运行.
2. 对于STC单片机RTOS,采用什么技术才能保证OS 切换任务的实时性, 越快越好?
答: 采用定时器 0 (模式 3)直接切换, 才能保证OS 切换任务的实时性, 最快.
tzz1983 强调的是 通下 模拟 PendSv 中断(最低优先级) 来切换, OS 切换任务的实时性差,
但用户中断响应的实时性提高了, 其实我也偏向于 tzz1983 方案.
我理解为, 整个 os系统, 实际上是个用软件模拟 cpu 的硬件功能, 处于最低优先级及以下运行,
要求真正有实时性的任务(非os任务,高级中断)让位给用户中断, 其任务优先级, 其本质
是 os(最低优先级) 处理哪个任务优先运行.
保证OS 切换任务的实时性, 越快越好?
应该是我描述不清.
现更正为, 保证OS 系统, 响应中断的实时性, 越快越好?
-----------------------------------------------------------------------------------
这个技术探讨话题, 现更正如下:
1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
2. 对于STC单片机RTOS,采用什么技术才能保证OS 系统, 响应中断的实时性, 越快越好?
LAOXU
发表于 2024-3-26 18:37:30
gentleman 发表于 2024-3-26 17:46
这次 不存在理论上的 bug了吗
和我的理解没什么差异.
中断中 不用中断嵌套计数器,
本质是用户中断没有通知 os
任务切换放在最低级没问题, 如放在最高级, 就有一大堆问题等着攻克.
gentleman
发表于 2024-3-26 18:44:56
LAOXU 发表于 2024-3-26 18:37
和我的理解没什么差异.
中断中 不用中断嵌套计数器,
这里不算通知了吗{:4_267:}
算了我把全部代码发一下吧,找不到合适的例子测试,大家来
gentleman
发表于 2024-3-26 18:59:26
LAOXU 发表于 2024-3-26 18:37
和我的理解没什么差异.
中断中 不用中断嵌套计数器,
而且我用了 中断嵌套计数器啊
你没看仔细吧{:4_168:}
1L 更新了
tzz1983
发表于 2024-3-26 19:27:54
gentleman 发表于 2024-3-26 17:16
兄弟参考了你好多代码这样处理有问题吗
现在os跑起来了
首先指出第一个BUG:
只要嵌套就直接退出????
OS 滴答不用跑了? 只要嵌套就丢TICK ??
正确的做法应该是除了不切换任务,别的都需要.
代码还没下载,这样搞得我好累呀{:lol:} 你自己沉淀一下,我等会去看看
gentleman
发表于 2024-3-26 19:39:06
本帖最后由 gentleman 于 2024-3-26 19:40 编辑
tzz1983 发表于 2024-3-26 19:27
首先指出第一个BUG:
有bug好,多来点{:4_188:}
==========================
tick东西 本来也不准吧,想准要用其他定时器的{:4_167:}
官方那个版本,不就是 低优先级 t0(是低优先级吧,一会翻代码确认一下)
有嵌套 也不进 t0中断啊
在这给它整准了 不知道会不出问题
gentleman
发表于 2024-3-26 19:48:26
tzz1983 发表于 2024-3-26 19:27
首先指出第一个BUG:
我知道兄弟的意思了
原来的定时器是挂起,等其他中断退出后相应
我这直接给重载了
似乎是不对
tzz1983
发表于 2024-3-26 19:50:02
gentleman 发表于 2024-3-26 19:39
tick东西 本来也不准吧,想准要用其他定时器的
void vTimer0ISR( void )
{
UNUSED( pxCurrentTCB );
if (OSIntNesting>0)
{
xTaskIncrementTick();
__asm { RETI }
}
.....
}
这样不就好多了,我对Free确实不熟悉,搞起来太累,没看透也是不敢乱动.
底层的东西很考细心的,我再帮你看看勾子那一部分,其它的就不看了, 这样搞得我累死,理解一下
gentleman
发表于 2024-3-26 19:51:53
tzz1983 发表于 2024-3-26 19:50
void vTimer0ISR( void )
{
UNUSED( pxCurrentTCB );
辛苦兄弟了{:4_197:}