杨为民 发表于 2023-7-30 23:20:53

熊仔 发表于 2023-7-30 19:54
uCOS-II 在其他芯片是支持不等长任务堆栈的。
只是作者设计这个os的时候没有考虑到8051这么奇葩的data空间 ...

既然你觉得有必要,我就升级一下我移植的uC/OS-II版本,支持一下不等长堆栈。说实话,我也看不惯等长堆栈的限制,早就想废掉这个限制了

杨为民 发表于 2023-7-31 00:46:14

熊仔 发表于 2023-7-30 19:54
uCOS-II 在其他芯片是支持不等长任务堆栈的。
只是作者设计这个os的时候没有考虑到8051这么奇葩的data空间 ...
你想要的8051单片机上的不等长堆栈的uC/OS-II来了,这是微山x51-UCOSII-RTOS的V2.1版本,其中专门设置了新的建立不等长堆栈任务的函数“uCx51_TaskCreate”,见下图:



欢迎继续你讨论和提出改进意见,共同促进RTOS在STC单片机上的应用。
下面是STC8H单片机上的V2.1版本的uC/OS-II


熊仔 发表于 2023-7-31 10:49:21


谢谢回答,并修改了代码。

大概看了下。提供的是LIB文件,看不到具体实现的过程。只能通过汇编看。

对杨老师移植的版本最大的疑问是系统竟然用2个定时器。
定时器0 :LCALL _?OSTimeTick                     1kHz
定时器3 :LCALL _?uCx51_IntSched          10kHz


太浪费定时器了吧。为啥不能合并再一起?
还有 改动把IntNesting改成uCx51_IntNesting变量。导致其他函数改动太大了。
和作者的思路不在一起,我认为不应该改,把IntNesting 变量用data声明就好,加快速度。当然OSLockNesting也改data。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA24AAAC4CAYAAACb3r/IAAAgAElEQVR4Ae29/899a1keuH+bv2F+mPSH4VgjZBJCNf7UBNpJZICkTRNqVJRGtEHCNCmOUacZMKaQgKlppzNJUWcOg0KtwRY5Q1HxiFinMhX8BkVGJR6PVsRvB0UOeOCsyb33e7372td738961tpr7Xfv/V6bLO7v9/Os63n2+67r8+x3n81w4a93vetdwxNPPDHpipre19/93t8f4vqKr/+Zbclms9nq4YvXY489dtvqpS996fDuzebWVuX7vu/71NVtf803/E/DsNkMH5brBV/zzd09kPij/+Zdw+888XtDyJ/86Z+5vd714+8ecL3jnf9miOv/fNvbUTZZfvRjv3HbG+N89//8v9zxRd6UV/R47P9+3/ZiPXxhY4yffv/PbvWQMX74e16xxk8O/+32gh7yv/nDzRByew3D8F89++xW38ohlmcXy8bgfZLF7TMCRsAIGAEjYASMgBEwAi0EapbRqjqjGBO397znPSWB49hU4jYMO7KG2w6yFA/pIG/wh2w9oM8hbpvNG4a4grgpaQt7N5ddDs+jpQcZiyuI29g1l7gxaQORAnmDZP8U8vaRX/m14ZirhU3EQMCYvAVpwxXxIGsgbKxHLHu19kWWb58RMAJGwAgYASNgBIyAEWAE8qdMzjhzHcTtYx/72PDyl798+IEf+IE75C18EYucOJ2bQtzipA0XQ9Eib5zH+lTiBtIWMsarLs7j8cb0IG2f+/xflVecys0hbkragqAxScPpl/qnkrenPvPZ4QvPfOn2CjuuP/jUH925PvbxTwyPvu2HxyDZxoN8ffbpL94SOCZsrIOwbQncDZkzceuC2ElGwAgYASNgBIyAETACExG4GuIWhCwjb0raphK3wBMfk1Rsp5K3KcTtFf/jm4apV8xnyouJ20889t5h7JpC4piosY7TNpA32JEz9RWnbiBrLJW4TSFtMQcmbiBqmYw8kLd4I4HAZffhE7cMFfuMgBEwAkbACBgBI2AEehG4KuKm5C0jbVOJW5C2IERLkLcpxC0+GrmR//3XH46/odp9bDJOhPj6pV/6pe08exc+8oK4xanaWn/vlhG2yjdl3pybkTcmblNJW/QOQhYXyBrr4WM79Fvy5r9x46WxbgSMgBEwAkbACBgBI7AgAldH3Ji88ccj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


然后改下函数OSIntEnter,判断去掉,省时间。
voidOSIntEnter (void) large reentrant
{
    if (OSRunning == OS_TRUE) {
//      if (OSIntNesting < 255u) {//这句没用,不可能有255个中断
            OSIntNesting++;    /* Increment ISR nesting level                        */
//      }
    }
}

原函数先用判断OSRunning是否为1,才对OSIntNesting++。
杨老师的版本直接对uCx51_IntNesting++。

杨为民 发表于 2023-7-31 17:24:11

本帖最后由 杨为民 于 2023-7-31 17:25 编辑

熊仔 发表于 2023-7-31 10:49
谢谢回答,并修改了代码。

大概看了下。提供的是LIB文件,看不到具体实现的过程。只能通过汇编看。

常言道授人以鱼不如授人以渔,意思是要培养学生的动脑筋动手能力。因此对于学生提出的问题,如果我觉得学生能够通过自己的努力解决,我通常不会直接给他答案,一般是说你自己去试试,你自己会得到答案的。如果学生试了还不行,我会与他交流问题卡在哪里,然后再一起去找出解决的方法。所以关于我移植范例中的两个定时器能不能合在一起,你可以去试试,也可以想一想为什么,欢迎把你试的和想的结果分享在这里。这次介绍如何移植uC/OS-II,我选择了最简单的实验设备,发了大概10篇有关的帖子,就是希望各位有兴趣的读者能够亲自试一试,亲自尝一尝RTOS梨子的滋味

熊仔 发表于 2023-7-31 21:56:48

本帖最后由 熊仔 于 2023-7-31 22:51 编辑

刚测试了下,定时器3的LCALL _?uCx51_IntSched      是可以合并到定时器0的。
data:image/png;base64,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
看到杨老师写的 STC单片机uC/OS-II移植记(6):RTOS系统中断研究与测量
没有明确说明用2个定时器的原因。

通过分析,这样做,很可能是为了准确测量切换任务各函数执行时间。

把中断任务切换函数弄到定时器3,这时,定时器0只管系统节拍处理,可以测量定时器0的中断时间。
P26口的高电平时间就是执行时间。
如果不是这个原因还请杨老师明示下。

通过查看汇编代码:
P21 测量系统(中断)级别切换任务时间
P23 测量任务级别切换任务时间



熊仔 发表于 2023-7-31 22:16:19

本帖最后由 熊仔 于 2023-7-31 22:27 编辑

目前移植的os,还发现2处瑕疵。
1,新建任务入口参考 void    *p_arg, 初始化堆栈的时候没有保存到任务堆栈中。
2,系统(中断)级别切换任务 里面调用了两次OSTaskSwHook 钩子函数。应该删除一次。

如果把保存堆栈函数后面的调用OSTaskSwHook 删除,就是统一在进入后调用OSTaskSwHook钩子函数。任务级别切换也需要在入口进行调用OSTaskSwHook钩子函数。

熊仔 发表于 2023-7-31 23:07:40

本帖最后由 熊仔 于 2023-7-31 23:11 编辑

还发现一个重要瑕疵,如果当前有任务调度,会导致随后任务级OSCtxSw 任务切换函数执行。

data:image/png;base64,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

data:image/png;base64,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

逻辑分析仪抓的波形可以说明,P21高电平脉冲后,紧接着P23高电平脉冲。说明OSCtxSw 任务级切换调用了一次。

杨为民 发表于 2023-8-1 09:38:09

熊仔 发表于 2023-7-31 23:07
还发现一个重要瑕疵,如果当前有任务调度,会导致随后任务级OSCtxSw 任务切换函数执行。




(1)一个事件发生后,又发生了另一个事件,两个事件未必关联,也未必有是因果关系。就像大哥先生了个儿子,然后同一年二哥也生了个儿子,两者未必有关联,也未必为因果。我们在思考问题和评价问题时要避免落入这种下意识的陷阱中。
(2)作为课后作业,就用我在这个帖子中给的程序,你试试证明这两者有或者没有因果关系。如果三天后没有试出来,提醒我给出答案。

杨为民 发表于 2023-8-1 09:55:23

熊仔 发表于 2023-7-31 22:16
目前移植的os,还发现2处瑕疵。
1,新建任务入口参考 void    *p_arg, 初始化堆栈的时候没有保存到任务堆栈 ...

(1)我压根不赞同给单片机RTOS的任务函数设置上面输入参数,所以不高兴保存它,我自己写的RTOS的任务函数都没有参数。
(2)uC/OS-II一次任务切换调用两次钩子函数,在任务实际切换前后各调用一次。它这样设计的目的是在任务切换前让用户检测任务切换条件是否满足,决定是否进行切换,而在任务切换后,新任务尚未执行之前再调用一次钩子函数,一是可以用来启动一些本任务需要的工作,二是可以用来向其他任务发送信息和执行某些操作,以此实现各个任务之间的协调工作。
(3)uC/OS-II的这种在任务切换前后两次调用钩子函数,是一种很周全的考虑,只是在一般情况下用不到而已。我写的学习版RTOS,这两个钩子函数回调都省了,方便入门者学习。

杨为民 发表于 2023-8-1 10:19:36

熊仔 发表于 2023-7-31 21:56
刚测试了下,定时器3的LCALL _?uCx51_IntSched      是可以合并到定时器0的。

看到杨老师写的 STC单片机 ...

在范例程序中使用两个定时器除了准确测量任务切换时间,还有以下的目的:
(1)给出规范的RTOS中断ISR写法,比较两个ISR就可以学习到哪些是固定部分,用户自己的程序应该放在什么地方。
(2)说明一个RTOS系统的节拍的两个基本部分是可以分开的,“_?OSTimeTick”决定了“Sleep”功能的时间精度,这里是1毫秒,“_?uCx51_IntSched”决定了RTOS的实时响应时间。
(3)调节定时器3可以具体测量在STC8H上33MHz情况下的实时响应时间,经实际测试可以达到小于15微秒(定时器3工作在60KHz)。本论坛介绍的PLC对应的逻辑响应时间是15毫秒,对比之下RTOS响应时间比PLC快几十到几百倍,因此使用RTOS的DCS系统在工业控制中超越PLC成为主流。
(4)使用两个定时器可以研究中断嵌套保护的作用,含定时器0则可以研究在RTOS中采用STC单片机定时器0的不可屏蔽中断模式的可行性(你有兴趣修改一下模式试试)
页: 1 [2] 3 4
查看完整版本: STC单片机uC/OS-II移植记(3):整理移植源