找回密码
 立即注册
楼主: 杨为民

单片机RTOS实时响应时间排行榜重大宣布:STC32G12K128单片机 全面碾压 STM32F103C

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-4-11 22:53:21 | 显示全部楼层
tzz1*** 发表于 2024-4-11 22:48
杨总, 我是不是又说错了什么话, 让您老不高兴了,
不过我现在也要学会淡漠了, 什么害羞, 第一, 不服, 那 ...

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


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





点评

我没有代码, 您老的测试方法就是我中意的  详情 回复 发表于 2024-4-11 22:55
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-4-11 22:55:20 | 显示全部楼层
杨*** 发表于 2024-4-11 22:53
看到你指鹿为马,自说自语,独自跟风车打架,担心你已经走火入魔了.

我没有代码, 您老的测试方法就是我中意的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 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还将继续优化,在保证可靠性的前提下,争取进一步提高任务切换效率。



点评

逐句回复: (1)杨老师的最新排行榜我已查看,正如杨老师所述,无论如何,“软中断替代法”切换任务的效率都不可能赶上“直接切换法”。 排行榜是客观的,承认它就行。每个作品都有自己的目的和特色,粤菜为什么要  详情 回复 发表于 2024-4-13 14:56
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-4-13 14:56:49 | 显示全部楼层
本帖最后由 杨为民 于 2024-4-13 15:00 编辑
Cos*** 发表于 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   { SETB  EA      }                               \
    ISR_Handler_Hook##n();                  /*app勾子*/     \
    __asm   { CLR  EA      }                                \
    OSIntExit();                                            \
    if(OSIntNesting==0){ portSW_TO_PSP() }                  \
    m_OSIntCtxSw();                                         \
    portRESTORE_CONTEXT();                                  \
    __asm   { SETB  EA      }                               \
    __asm   { RETI          }                               \
}
__asm{
    CSEG    AT  009BH           /**/
    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还将继续优化,在保证可靠性的前提下,争取进一步提高任务切换效率。

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

点评

果然还是杨老师讲解的更为透彻,用词也更为准确!  发表于 2024-4-13 15:19
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-4-13 16:26:48 | 显示全部楼层
本帖最后由 CosyOS 于 2024-4-13 16:32 编辑

刚才杨老师讲解的有一点非常重要,就是“有中断延迟”与“零中断延迟”的差别,
撇开“零中断延迟”是否有必要暂且不论,

两种技术路线,由系统保护临界段所带来的“中断延迟时间”之比是:有 / 无 = +∞,是天地之别。

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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-4-16 01:39:46 | 显示全部楼层
Cos*** 发表于 2024-4-11 17:19
测试程序已就绪,请杨老师评测:

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

点评

测试程序已发布,请杨老师评测: 这回排名要垫底了  详情 回复 发表于 2024-4-16 15:29
我调整完后要先测试下,下午会尽快发布  发表于 2024-4-16 12:04
好的杨老师,我调整一下程序,一会发  发表于 2024-4-16 11:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-4-16 15:29:45 | 显示全部楼层
杨*** 发表于 2024-4-16 01:39
你能不能参考你的STC32G的实时响应测试程序,把你的CosyOS-STC8H的实时响应测试程序也发上来参加排行,谢 ...

测试程序已发布,请杨老师评测:
RTOS实时响应时间测试_CosyOS-II-STC8H-TEST-V2.1.3-20240416.rar (352.48 KB, 下载次数: 148)

这回排名要垫底了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-4-16 22:11:39 | 显示全部楼层
各位网友,3楼发布了运行在STC8H系列单片机上的一些RTOS的实时响应时间的排行榜。
等再多一些作品发布后一起点评
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-4-16 23:23:17 | 显示全部楼层
杨*** 发表于 2024-4-16 22:11
各位网友,3楼发布了运行在STC8H系列单片机上的一些RTOS的实时响应时间的排行榜。
等再多一些作品发布后一 ...

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

点评

原理是一样的。只是为了大家能够更好地学习你的RTOS,只能请你本尊专门为此次测试亲自写一个与排行榜大家相近的程序。这样做有两个好处: 一是大家用同一个程序进行比较,结果比较公平。 二是本尊亲自示范你的RTOS  详情 回复 发表于 2024-4-16 23:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-4-16 23:31:13 | 显示全部楼层
能不能理解为,在相同的时间内(两个单片机主频一致),STC32G的任务调度更加精准? 如果是这样的话就可以说明,STC32G的RTOS库更加强大!

点评

是的,通俗地说就是从下命令开始,STC32G比M3单片机能更快地开始执行命令。 这个结果我自己也怀疑,所以把测试的程序全部以源码的形式放在这里供大家下载验证。 还有一种可能是我的M3单片机是假的,但是我的开发板  详情 回复 发表于 2024-4-16 23:56
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:49 , Processed in 0.146907 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表