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 ,要很小心。