fanxsp 发表于 2024-5-23 12:14:57

ZHAOBAO511 发表于 2024-5-23 11:51
这个不错,有STC15的吗?

都可以用

xingyan527 发表于 2024-6-4 18:45:53

可以支持STC32G系列MCU吗?

tzz1983 发表于 2024-6-12 15:29:02

嘿, fanxsp, 好久没说话了, 不打算更新了吗,今天去了一下你的代码, 怎么出了个 OSNesting 呢 {:lol:}

fanxsp 发表于 2024-6-12 16:16:04

tzz1983 发表于 2024-6-12 15:29
嘿, fanxsp, 好久没说话了, 不打算更新了吗,今天去了一下你的代码, 怎么出了个 OSNesting 呢    ...

OSNesting是用来 做为large 模式的 reentrant函数 跟踪中断层次的,这样任务和中断可以分配单独的模拟软堆栈,类似于PSPMSP,可以节省空间,这个功能是可以配置的,可以配置为不使用。

fanxsp 发表于 2024-6-12 16:24:32

有增加一些功能,过一段时间,在实际项目中,多测试一下,再说吧。

mod3h 发表于 2024-6-22 14:02:47

呵呵呵,裸奔的我从头到尾看一遍,技术在交流中进步!

tzz1983 发表于 2024-6-28 12:16:18

本帖最后由 tzz1983 于 2024-6-28 13:23 编辑

@fanxsp 最近有没有玩251呀, 我遇到了一个问题, 百思不行其解, 帮我看看?

型号: STC32G12K128   251内核

进出临界区的代码如下:
#defineOS_ENTER_CRITICAL()    do{ EA=0;uxCriticalNesting++; }while(0)
#defineOS_EXIT_CRITICAL()   do{ uxCriticalNesting--; if(uxCriticalNesting==0) EA=1; }while(0)

运行一段时间就出现异常, 更换别的方法又正常, 我是左想右想也想不出原因呀!
这个逻辑应该没有问题 , 而且在51核上这样用得好好的,到251上就不行了{:sweat:}



===已经找到原因了

fanxsp 发表于 2024-6-28 22:06:41

tzz1983 发表于 2024-6-28 12:16
@fanxsp 最近有没有玩251呀, 我遇到了一个问题, 百思不行其解, 帮我看看?

型号: STC32G12K128   251内核


原因找到了是吧,能说说是什么情况吗?

tzz1983 发表于 2024-6-29 08:16:04

本帖最后由 tzz1983 于 2024-6-29 08:19 编辑

fanxsp 发表于 2024-6-28 22:06
原因找到了是吧,能说说是什么情况吗?
临界区代码没有问题 , 是我自己没按规范使用.

这里体现出了这个临界区代码的优缺点:
优点是精简,

缺点是,总是假定第一次进临界区时的条件是 EA=1, 否则在退出临界区时EA会被意外打开.
当然这不是BUG, 严格按配对规则使用时没有问题.

我当时出错是因为在中断内用汇编时, 因为中断内EA的状态已知, 所以直接CLR EA ,后面再SETBEA.
本来也不会有问题 , 可偏偏在中途调用外部勾子函数,勾子函数又使用了临界区. 所以挂了.{:lol:}

总结来说是我自己的一个BUG.

fanxsp 发表于 2024-6-29 08:44:13

tzz1983 发表于 2024-6-29 08:16
临界区代码没有问题 , 是我自己没按规范使用.

这里体现出了这个临界区代码的优缺点:


是的,OS启动时,EA就是开的,所以直接操作EA ,要很小心。
页: 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29
查看完整版本: 原创极简的51-MCU专用RTOS TinyRTOS51