uC/OS-II @Ai8051U 移植版,AI8051U,32G8K64,32G12K128
uC/OS-II @AI8051U_Xsmall+LargePendSv切换任务, 2024/7/6 移植版===AI8051U【edata/2K + xdata/32K】, 32G8K64【edata/2K + xdata/6K】
迎接AI8051U到手, uC/OS-II @251_Xsmall+Large 版,
对小容量edata的型号支持力度加大. 2K edata 多任务轻松运行
简介: 用于 32位8051 指令集内核上的 uC/OS-2.93 移植版本.
*支持 xsmall 和 large两种编译模式
*支持 指定OS全局变量存放于 edata 或 xdata. 不受编译模式影响.
*支持 MSP+PSP 模式, 可大量节省edata的使用量.
*支持 不受OS管理的中断选项.
测试,例程已包含并通过了 :
"计数信号量, 消息邮箱, 标志集, 邮箱队列, 互斥信号量, 内存管理, 软件定时器,
任务上锁/解锁,任务挂起/解挂,获取OS时间,统计任务,堆栈检查,"
的简单功能测试.
为方便网友在AI8051U实验箱上做uC/OS-2的实验,
2024/9/8 添加了AI8051U实验箱uC/OS-2例程
AI8051U实验箱上的例程只做了三个简单任务。
类似一个空的框架,坛友们可以加入自己喜欢的内容。
任务A: 板载的8个LED闪烁.
任务B: 板载的数码管显示OS累积运行时间/秒。
任务C: 获取OS运行时间.
统计任务: 用printf()打印OS运行信息。
最新版本, 2024/7/7
在AI8051U实验箱上运行 uC/OS-II 的例程代码2024/9/8
历史旧版本:
tzz1983 发表于 2023-10-20 11:46
RETI "特殊指令"BUG描述:
"特殊指令"的概念参考STC32G用户手册
在UCOS应用中, 调用OSTimeDly() 或OSSemPe ...
{:4_250:} {:4_250:}{:4_250:}{:4_250:} 用一个中断模拟PendSV 进行任务切换,这个方法好,可以不用跟踪中断嵌套了。51单片机中断时不会自动关中断,用变量来跟踪中断嵌套,实际上是有问题的。缺点就是会多一次中断响应和寄存器入栈、出栈操作。 本帖最后由 fanxsp 于 2023-10-28 08:47 编辑
fanxsp 发表于 2023-10-26 17:07
用一个中断模拟PendSV 进行任务切换,这个方法好,可以不用跟踪中断嵌套了。51单片机中断时不会自动关中断 ...
应该是会多出一些机器周期,如果在中断中使一个高优级任务就绪,原来的方法是在中断退出时,就切换到高优级任务。中断模拟的方法是要退出当前中断,然后再响应中断,在中断里切换到高优先级任务。就是多了一次寄存器出栈、寄存器入栈及中断响应的时间。ARM 的PendSV指令就没有这个问题,PendSV指令是延时响应,是直接跟在最后退出的中断服务程序后面的,不用退出中断后再响应。ARM Cortex M0M3 有末尾连锁,51没有。
fanxsp 发表于 2023-10-28 08:37
应该是会多出一些机器周期,如果在中断中使一个高优级任务就绪,原来的方法是在中断退出时,就切换到高优 ...
用中断模拟的方法,我理解是可以不用跟踪中断嵌套了,也不用在每个中断退出时,调用OSIntExit()了,只要在系统服务函数中,根据需要触发中断就可以了。我理解ARM的PendSV指令,应该也是起这个作用。 本帖最后由 tzz1983 于 2023-10-28 09:25 编辑
fanxsp 发表于 2023-10-28 09:03
用中断模拟的方法,我理解是可以不用跟踪中断嵌套了,也不用在每个中断退出时,调用OSIntExit()了,只要 ...
还是需要调用OSIntExit()了, 这里只是弱化了OSIntNesting的作用, 但是OSIntExit() 除了OSIntNesting还有一些别的操作,你去看一下原代码就清楚了。
除非你想得特别周到,自己做了OSIntExit()的大部分活,但是如果这样就没什么意义了,还不如简单的调用一下。并且,一般不是特别的原因,我们不要轻易去违背原OS的使用规则,有时候我们一下子可能想不到那么全面,不违背可以避免一些坑,这对产品来说很重要。
另外一个我想说的是, 如果在一个高优先级中断里没有使用任何OS应用,并且比它更高优先级的所有中断代码里也没有使用任何OS应用, 此时应该是可以不用OSIntNesting++和OSIntExit()的。
这个应该是和FREERTOS不受OS管理的中断差不多的道理,现在我还不敢最终确认,等我好好缕缕,如果没有问题,以后再发表出来。
tzz1983 发表于 2023-10-28 09:21
还是需要调用OSIntExit()了, 这里只是弱化了OSIntNesting的作用, 但是OSIntExit() 除了OSIntNesting还有 ...
嗯,移植的话,还是不要改动的好,我只是从原理上觉得可以取消。我也有做一个小的51的系统,自已用。就是觉得,51单片机 用变量跟踪中断嵌套不可靠。用中断模拟的办法,就可以完全解决这个问题了。这是我进这个论坛的一个大收获。 fanxsp 发表于 2023-10-28 09:45
嗯,移植的话,还是不要改动的好,我只是从原理上觉得可以取消。我也有做一个小的51的系统,自已用。就是 ...
51内核我用的型号也比较多,但是51内核植入OS就是比较烦,因为256字节IDATA的限制,我曾经也想自己做一个合适51内核的东西,但一直想不出较好的方案,不知道你是怎么实现的,发个纯系统出来看看哈。并且你发出来对你自己也是很有好处的,你想不到的东西别人可能很轻易就能想到,这就是集大众力量的好处。