杨为民 发表于 2024-4-11 22:53:21

tzz1983 发表于 2024-4-11 22:48
杨总, 我是不是又说错了什么话, 让您老不高兴了,
不过我现在也要学会淡漠了, 什么害羞, 第一, 不服, 那 ...

看到你指鹿为马,自说自语,独自跟风车打架,担心你已经走火入魔了.


说正事:明天计划进行新的排名,你要不要拿出你自己作品的被测程序?





tzz1983 发表于 2024-4-11 22:55:20

杨为民 发表于 2024-4-11 22:53
看到你指鹿为马,自说自语,独自跟风车打架,担心你已经走火入魔了.




我没有代码, 您老的测试方法就是我中意的

CosyOS 发表于 2024-4-13 13:26:30

本帖最后由 CosyOS 于 2024-4-13 13:41 编辑

杨老师的最新排行榜我已查看,正如杨老师所述,无论如何,“软中断替代法”切换任务的效率都不可能赶上“直接切换法”。

CosyOS在设计上固定采用“软中断替代法”。
最初采用此方案只是单纯为了实现“零中断延迟”,由SysTick、PendSV、任务临界区,三者构建“服务层临界区”,
中断中调用的服务都挂起到PendSV中执行,PendSV还负责任务调度/切换,以实现“零中断延迟”。

1、“软中断替代法”还有另外一个好处,就是不用考虑“中断嵌套时不能切换任务”的问题,因为PendSV为最低优先级中断,不可能在中断嵌套中。
2、“软中断替代法”切换任务的效率偏低,不仅是因为额外的入栈、出栈,对于CosyOS来说,中断挂起服务的装载(加入到FIFO、触发PendSV)、
执行(从FIFO中取出,而后调用函数指针)都需花费额外的时间。

总之,两种方法都各有优势,平分秋色!
未来,CosyOS-II还将继续优化,在保证可靠性的前提下,争取进一步提高任务切换效率。


杨为民 发表于 2024-4-13 14:56:49

本帖最后由 杨为民 于 2024-4-13 15:00 编辑

CosyOS 发表于 2024-4-13 13:26
杨老师的最新排行榜我已查看,正如杨老师所述,无论如何,“软中断替代法”切换任务的效率都不可能赶上“直 ...
逐句回复:

(1)杨老师的最新排行榜我已查看,正如杨老师所述,无论如何,“软中断替代法”切换任务的效率都不可能赶上“直接切换法”。
排行榜是客观的,承认它就行。每个作品都有自己的目的和特色,粤菜为什么要与川菜比“辣”呢?
“软中断替代法”切换任务的效率都不可能赶上“直接切换法”,这个结论未必成立,万一哪天谁驾着七彩祥云或者踩着风火轮来的时候,这个结论就破了。
没准哪天你参透了,那个谁就是你。

(2)CosyOS在设计上固定采用“软中断替代法”。

最初采用此方案只是单纯为了实现“零中断延迟”,由SysTick、PendSV、任务临界区,三者构建“服务层临界区”,
中断中调用的服务都挂起到PendSV中执行,PendSV还负责任务调度/切换,以实现“零中断延迟”。
你的设计目标是“零中断延迟”,你的目标达到了,并且你还借鉴其他RTOS的先进技术,你这就是“好作品”呀。
况且比响应时间 9.375微秒/8.500微秒=110%,差了10%。但是比关中断时间 1~2微秒 / 0微秒=无穷大,天和地的差别。

(3)1、“软中断替代法”还有另外一个好处,就是不用考虑“中断嵌套时不能切换任务”的问题,因为PendSV为最低优先级中断,不可能在中断嵌套中。

2、“软中断替代法”切换任务的效率偏低,不仅是因为额外的入栈、出栈,对于CosyOS来说,中断挂起服务的装载(加入到FIFO、触发PendSV)、
执行(从FIFO中取出,而后调用函数指针)都需花费额外的时间。

是的,我帮你用本排行榜的实际例子来说明:
//YWM ==== 定时器3 ISR =========
void Timer3_ISR (void) interrupt 19
{
      // TODO: 在此处添加用户代码
                        P00 = ~P00;               
// ---- 中断启动等待任务 ------------      
                        P01=1;      
                        iResumeTask(TASK_A);      
}
上面是CosyOS的程序,与我们平常使用的C251裸机编程一样,这就方便了用户,可以很容易地就将自己裸机程序升级到RTO程序了。

但是对于tzz1983的第2名程序,他的用户中断是这样的:
void Timer3_ISR_Handler_Hook (void)    // 19               
{
    //添加中断代码
      P00=~P00;      
// ---- 中断启动等待任务 ------------      
                        P01=1;
                        OSTaskResume(2);                        
}

上面的钩子函数给人一种裸机编程的感觉,但是由于下面的中断模块的存在,对钩子里的程序还是有很大的限制。

/*中断函数宏模板*/
#define _ISR_Package_CODE(n)                                                \
void ISR_Handler_##n (void)                                                 \
{                                                                           \
    __asm{ISR_Handler##n:}                  /*汇编标号*/                  \
    portSAVE_CONTEXT();                     /*寄存器入栈*/                   \
    if(OSIntNesting==0){ portSW_TO_MSP() }/*如果是第一层中断切换至MSP*/   \
    OSIntNesting++;                                                         \
    __asm   { SETBEA      }                               \
    ISR_Handler_Hook##n();                  /*app勾子*/   \
    __asm   { CLREA      }                              \
    OSIntExit();                                          \
    if(OSIntNesting==0){ portSW_TO_PSP() }                  \
    m_OSIntCtxSw();                                       \
    portRESTORE_CONTEXT();                                  \
    __asm   { SETBEA      }                               \
    __asm   { RETI          }                               \
}
__asm{
    CSEG    AT009BH         /**/
    CLR   EA
    JMP   ISR_Handler19      /**/
}

(4)顺带也说明一下,让RTOS中的用户中断像C251的裸机编程一样,不仅“软中断替代法”可以实现,采用其他方法也可以实现,只是编程技术要求高一些。
// ==== 实时任务唤醒测试 定时器3 中断 ========
void Timer3_ISR(void) interrupt 19
{
// ---- 定时信号 ------------      
                        Test_CH0 = ~Test_CH0;      
// ---- 中断启动等待任务 ------------      
                        Test_CH1=1;      
                        OSTaskResume(2);                           
}
上面是排行榜第1名的程序

(5)总之,两种方法都各有优势,平分秋色!

未来,CosyOS-II还将继续优化,在保证可靠性的前提下,争取进一步提高任务切换效率。

这个很好,只是最好将“平分秋色”改为“各有特色”,不然你俩将秋色都分了,其他方法怎么办?
作为老师,我更喜欢“待到山花烂漫时,都在丛中笑”

CosyOS 发表于 2024-4-13 16:26:48

本帖最后由 CosyOS 于 2024-4-13 16:32 编辑

刚才杨老师讲解的有一点非常重要,就是“有中断延迟”与“零中断延迟”的差别,
撇开“零中断延迟”是否有必要暂且不论,
两种技术路线,由系统保护临界段所带来的“中断延迟时间”之比是:有 / 无 = +∞,是天地之别。

在这里,仅是在描述两种技术路线的差别,不涉及具体作品的比较。


杨为民 发表于 2024-4-16 01:39:46

CosyOS 发表于 2024-4-11 17:19
测试程序已就绪,请杨老师评测:




你能不能参考你的STC32G的实时响应测试程序,把你的CosyOS-STC8H的实时响应测试程序也发上来参加排行,谢谢!

CosyOS 发表于 2024-4-16 15:29:45

杨为民 发表于 2024-4-16 01:39
你能不能参考你的STC32G的实时响应测试程序,把你的CosyOS-STC8H的实时响应测试程序也发上来参加排行,谢 ...

测试程序已发布,请杨老师评测:


这回排名要垫底了{:4_257:}

杨为民 发表于 2024-4-16 22:11:39

各位网友,3楼发布了运行在STC8H系列单片机上的一些RTOS的实时响应时间的排行榜。
等再多一些作品发布后一起点评

fanxsp 发表于 2024-4-16 23:23:17

杨为民 发表于 2024-4-16 22:11
各位网友,3楼发布了运行在STC8H系列单片机上的一些RTOS的实时响应时间的排行榜。
等再多一些作品发布后一 ...

杨教授,你好。刚看了你的测试程序。
我的测试例程在 V1.10的demo/STC8H/tut5中,原理基本是一样的。我是用开天斧的P20,P21端口分别接逻辑分析仪的两个通道,其中接P20的通道设为上升沿触发。按下P32按钮测试任务中切换。往串口1发送一个数据,测试中断中切换。两个通道波形的上升沿之间的时间就是任务切换的时间。

嵌入式之路 发表于 2024-4-16 23:31:13

能不能理解为,在相同的时间内(两个单片机主频一致),STC32G的任务调度更加精准? 如果是这样的话就可以说明,STC32G的RTOS库更加强大!
页: 1 2 [3] 4 5 6 7 8 9 10 11 12
查看完整版本: 单片机RTOS实时响应时间排行榜重大宣布:STC32G12K128单片机 全面碾压 STM32F103C