找回密码
 立即注册
楼主: tzz1983

uC/OS-II @Ai8051U 移植版,AI8051U,32G8K64,32G12K128

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

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2023-10-28 10:35:52 | 显示全部楼层
51主要就是堆栈空间小,还有就是重入问题。我之前有用过 Salvo  和  small Rtos51 , 这两个系统,占用的资源很少。在用的过程中,也发现了一些问题。我现在自已写的一个,感觉测试还不够充分,再过一段时间吧。
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-10-28 10:53:38 | 显示全部楼层
CosyOS 新近推出专业版测试程序,欢迎二位测试、点评,共同进步。

点评

等有空的时候哈,我对你的OS有兴趣,不过你那边比较庞大,入门好像不简单,得花时间  发表于 2023-10-28 11:22
回复 支持 反对

使用道具 举报 送花

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

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2023-10-29 08:56:27 | 显示全部楼层
本帖最后由 fanxsp 于 2023-10-29 08:58 编辑
Cos*** 发表于 2023-10-28 10:53
CosyOS 新近推出专业版测试程序,欢迎二位测试、点评,共同进步。

下载看了一下,没看懂,能不能详细论述一下基本原理?  编译后,长度接近29K,代码这么大,也不知道是什么情况。

点评

这里有测试程序的介绍: https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1807&extra=page%3D1&page=16 先看下这个,就能懂了。 代码量大了些,不用管它,flash能放下就行了。 测试程序默认是所有功能全开  详情 回复 发表于 2023-10-29 12:32
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-10-29 12:32:25 | 显示全部楼层
fan*** 发表于 2023-10-29 08:56
下载看了一下,没看懂,能不能详细论述一下基本原理?  编译后,长度接近29K,代码这么大,也不知道是什么 ...

这里有测试程序的介绍:
https://www.stcaimcu.com/forum.p ... age%3D1&page=16
先看下这个,就能懂了。

代码量大了些,不用管它,flash能放下就行了。
测试程序默认是所有功能全开(为了方便各项测试),所以代码量会大些。
回复 支持 反对

使用道具 举报 送花

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

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2023-10-29 20:51:22 | 显示全部楼层
本帖最后由 fanxsp 于 2023-10-29 21:19 编辑
tzz1*** 发表于 2023-10-28 10:08
51内核我用的型号也比较多,但是51内核植入OS就是比较烦,因为256字节IDATA的限制,我曾经也想自己做一个 ...

今天我改成模拟中断的方式,调试正常了。我深入想了一下,这种方式在某些特定的情况下,还会进一步延迟高优先级任务的切换时间。如果恰好在发生中断的后一条指令,任务进入临界区,则需要在任务退出临界区后才会响应中断,进行任务切换,结果高优先级任务的切换又被进一步延迟了。但总的来说,还是比中断嵌套出错要好。对于用变量跟踪中断嵌套出错的情况分析如下:如果在任务T1中发生一个低先级的中断I1,在I1中断服务程序的Nesting++指令之前,发生一个高优的中断I2,在I2的中断服务程序中使一个高优级的任务T2就绪,那么I2退出时,就会切换到任务T2,结果中断I1的服务程序就得不到执行,要一直等到,任务T1重新运行后,才会执行I1的服务程序,结果中断I1服务程序,就可能被延迟很长时间,才得以执行。模拟中断,任务切换也可能被延迟,但还是比中断嵌套跟踪出错要好。ARM的PendSV指令就不存在这些问题,51单片机,想做完美,还是有点难。

点评

贡献你,调试正常,迈出了重要的一步  发表于 2023-10-30 11:16
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2023-10-30 10:40:11 | 显示全部楼层
本帖最后由 tzz1983 于 2023-10-30 10:44 编辑
fan*** 发表于 2023-10-29 20:51
今天我改成模拟中断的方式,调试正常了。我深入想了一下,这种方式在某些特定的情况下,还会进一步延迟高 ...

几个点:
1.用代码切换任务时,OSIntNesting++是否来得及加,这个问题之前和熊仔讨论过,本人也是认为OSIntNesting++放在中代码内是来不及加的,但是用汇编放在向量口是否来得及仍不是很确定。所以我的观点也是:用中断切换任务,不支持使用代码切换任务
2.“如果恰好在发生中断的后一条指令,任务进入临界区,则需要在任务退出临界区后才会响应中断”,这一点是正常的逻辑,不必太在意。理由:系统的响应速度是以最大的响应延迟来计算,也就是说,最终决定响应的是临界区代码的长度,至于你说的这个,不过是比之前的临界区多了一个指令周期而已,无关紧要的。
3.你之前说的那个 “多出了一次进出栈”,也是如此, 因为多出的进出栈不在临界区内, 所以也不会影响系统比它优先级高的响应,只要是不影响比自己优先级高的响应,就是没有问题。在不影响系统响应的前提下,多几步代码有什么关系? 平常我们CUP使用率在30%以上已经算很高了,多出的时间都在空闲任务内原地打转,如此想的话,那么多出的代码不过是占用了空闲任务的时间。(再说了,和ARM对比,这是硬件的不同,不能用软件的方法来恒量)


    其实大多数情况下,在一个实际项目中,只有不到1%的代码特别需要注重效率,剩下的99% 逻辑正确,结构合理更重要。
    理解来龙去脉即可,不追求完美,不提先决条件,在现有的基础上做到最好,就是完美。

回复 支持 反对

使用道具 举报 送花

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

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2023-10-30 11:14:37 | 显示全部楼层
本帖最后由 fanxsp 于 2023-10-30 11:38 编辑
tzz1*** 发表于 2023-10-30 10:40
几个点:
1.用代码切换任务时,OSIntNesting++是否来得及加,这个问题之前和熊仔讨论过,本人也是认为OSIn ...

嗯,赞同你的观点。 关于把OSIntNesting放在中断向量表,我也考虑过. 其实在中断向量表放一条关中断指令也是一样的,但是从开始中断响应到转入中断向量表还有2个机器周期,这2个机器周期不知道会不会响应高先级中断,我理解应该会的,但是查不到相关资料,也不确定。问一下STC的工程师,应该会知道,必竟芯片是他们设计的。

点评

(1)你在本贴第15楼对中断嵌套时切换任务的过程和会产生的危害的描述堪称经典。你对中断嵌套保护(有中断嵌套时不切换任务)的目的和不保护的危害理解十分到位。你对采用目前一些RTOS系统采用变量跟踪法的具体程序  详情 回复 发表于 2023-10-30 12:37
回复 支持 反对

使用道具 举报 送花

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

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-10-30 12:37:55 | 显示全部楼层
fan*** 发表于 2023-10-30 11:14
嗯,赞同你的观点。 关于把OSIntNesting放在中断向量表,我也考虑过. 其实在中断向量表放一条关中断指令也 ...

(1)你在本贴第15楼对中断嵌套时切换任务的过程和会产生的危害的描述堪称经典。你对中断嵌套保护(有中断嵌套时不切换任务)的目的和不保护的危害理解十分到位。你对采用目前一些RTOS系统采用变量跟踪法的具体程序所面临的不严谨和不完美的看法十分正确。
(2)在这个论坛中,CosyOS似乎根本不考虑中断嵌套保护问题;FreeRTOS范例不考虑系统定时器0中断会嵌入到其他中断的情况(其他中断发生时定时器0的中断发生);而移植的各种uC/OS版本(包括我的已经给出的移植教学范例),中断进入跟踪变量计数增加代码不在中断的一开始,中断退出跟踪变量计数减少代码也不在中断退出的最后时刻,因此中断嵌套保护不严谨。但是相当多的读者并不理解中断嵌套保护的重要性,也不理解为什么产品级别的RTOS必须要追求100%的可靠性,建议你专门开贴介绍你的心得体会。

(3)对于STC单片机,论坛中有权威的说法:《多级流水线内核的中断响应,STC8H8K64U系列,2023/9/20》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4346&extra=page%3D1
当中断发生后,至少会执行一条指令(地址是中断矢量处),当发布“RETI”指令后,至少会在新的地址处(堆栈中的返回地址)再执行一条指令。



(4)我对自己的TC单片机RTOS的中断嵌套保护程序和跟踪变量增加和减少代码的位置的程序介绍见《挑战者x51(2)中断外任务切换方法》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4504&extra=&page=2)帖子的第14楼有专门介绍,欢迎讨论和指正。
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2023-10-30 13:46:19 | 显示全部楼层
杨*** 发表于 2023-10-30 12:37
(1)你在本贴第15楼对中断嵌套时切换任务的过程和会产生的危害的描述堪称经典。你对中断嵌套保护(有中 ...

<STC多级流水线内核的中断响应>, 这个不足以说明放在向量口第一句就一定能执行得到,这里面主要讲的是“响应过程”和“特殊指令”之间的关系。

中断响应本身,并不是一条指令”, 以前有些书箱把中断响应过程描述为调用指令“LCALL”行为, 但是很明显,中断响应比LCALL做的事情更多一点,并且现在的STC也和以前不一样了。
所以:很大可能是可以的,但也不是绝对100%,具体是怎样,我也不知道!    反正用代码切换任务,这样做不放心,那是肯定的。幸好我不需要这样做

回复 支持 反对

使用道具 举报 送花

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

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2023-10-30 14:55:22 | 显示全部楼层
杨*** 发表于 2023-10-30 12:37
(1)你在本贴第15楼对中断嵌套时切换任务的过程和会产生的危害的描述堪称经典。你对中断嵌套保护(有中 ...

好的,我看一下
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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