oldniao
发表于 2025-2-28 09:30:43
13918210822 发表于 2023-12-29 16:49
又没有类似Linux一样的开源免费授权的 STCRTOS?
{:qiang:}
13918210822
发表于 2025-3-10 16:08:45
oldniao 发表于 2025-2-28 09:30
**** 作者被禁止或删除 内容自动屏蔽 ****
我自己写了一个,估计4月份发布,专门为stc8写的
stcmcuok
发表于 2025-4-21 14:04:43
STC 原生RTOS是什么系统啊
不是一直裸机的吗
CosyOS
发表于 2025-4-21 15:10:59
stcmcuok 发表于 2025-4-21 14:04
STC 原生RTOS是什么系统啊
不是一直裸机的吗
CosyOS,现已更新至 CosyOS-III V1.3.2,
https://www.stcaimcu.com/thread-1807-1-1.html
ukeoxcac
发表于 2025-6-3 08:56:09
我一个双字节,再中断里 ++, 主程序里赋值 用的 STC8C 这样会有问题吗 ,用了10来年了,这次用32G 程序比较复杂才注意这个问题。
CosyOS
发表于 2025-6-3 19:30:28
ukeoxcac 发表于 2025-6-3 08:56
我一个双字节,再中断里 ++, 主程序里赋值 用的 STC8C 这样会有问题吗 ,用了10来年了,这次用32G ...
对于51,在概率上一定是会出问题的,因为51只有单字节变量是原子访问类型的。
两个字节的变量在读取时,汇编指令是要分两次读的,一次读一个字节,
如果在两次读之间被中断打断,而后在中断中 ++,
最终读出来的是混合数据,一个字节是在++之前读的,一个字节是在++之后读的,就会出错。
如果确是这种简单情况,最简单的处理方法是,要在main中做互斥访问:
EA = 0;
读;
EA = 1;
当然不只有这一种方法,还可以有其它的方法,比如还可以关闭++的中断,
例如++的中断是 INT1:
EX1 = 0;
读;
EX1 = 1;
对于STC32,如果确是这种简单情况,通常是不会有问题的,不必做互斥访问。
因为对于C251来说,两个字节的变量,无论是直接寻址还是间接寻址,
通常在编译后,汇编指令都会一次读出两个字节。
ukeoxcac
发表于 2025-6-5 19:20:00
我还想再确认一下,32GXDATA 是不是 一次读出2个字节。
CosyOS
发表于 2025-6-5 23:02:55
ukeoxcac 发表于 2025-6-5 19:20
我还想再确认一下,32GXDATA 是不是 一次读出2个字节。
即使是 XDATA 变量,通常编译后,两个字节变量也是一次读出的。
但这并非绝对,不排除会有特殊情况。
但99%的情况,一定可以一次读出的。
只有查看反汇编才能100%确定。
你可以相关代码查看反汇编,截图给我,我帮你确认。
ukeoxcac
发表于 2025-6-6 07:12:26
相关代码查看反汇编 ,再那里看。
ukeoxcac
发表于 2025-6-6 07:13:49
那EXATA 是100% 一次读2个字节或4个字节?