fengye1512
发表于 2024-9-12 11:48:26
很强,下载学习。
ka1265
发表于 2024-9-28 14:21:02
{:4_165:}
远行的鹿
发表于 2024-10-19 11:20:51
测试发现工程包含有51的启动代码,如果使用其他芯片,比如STC8H4K会直接崩溃,好像是初始化内存超范围导致,请教一下这个初始化代码一定需要吗。
tzz1983
发表于 2024-10-19 14:34:36
本帖最后由 tzz1983 于 2024-10-19 14:39 编辑
远行的鹿 发表于 2024-10-19 11:20
测试发现工程包含有51的启动代码,如果使用其他芯片,比如STC8H4K会直接崩溃,好像是初始化内存超范围导致 ...
这里是因为51核运行UCOSII必须用到模拟栈,模拟栈的位置需要定位到XDATA的末尾,
如果模拟栈定位超出了XDATA的范围,一定是崩,
以上两个地方,比如4K xdata 的型号,1024*4= 4096 转为16进制 = 1000H, 即可
远行的鹿
发表于 2024-10-19 14:44:04
tzz1983 发表于 2024-10-19 14:34
这里是因为51核必须用到模拟栈,要有对应的设置才能正常运行。
以上两个地方,比如4K xdata 的型号 ...
非常感谢您的回复。另外有个建议:把打印的串口由P30\P31切换到其他端口,比如P36\P37等,如果在仿真的情况下输出数据到P30\P31端口会导致仿真运行失败,对于新手来说不知道是怎么回事。还有向您请教一下在任务里使用printf编译会报“重入”的警告,如何避免这个。
tzz1983
发表于 2024-10-19 19:02:51
本帖最后由 tzz1983 于 2024-10-19 22:51 编辑
远行的鹿 发表于 2024-10-19 14:44
非常感谢您的回复。另外有个建议:把打印的串口由P30\P31切换到其他端口,比如P36\P37等,如果在仿真的情 ...
打印的串口由P30\P31切换到其他端口,众口难调, 使用者可以自己作简单更改.
Keil C51大多数库函数都是不可重入,不建议多个任务调用同一个库函数.
如果强行调用, 除了编译器给出警告外, 还可能会出现一些不可预知的其它错误. 所以尽量避免.
有些简单的库函数,比如memcpy(), 这种可以自己编写一个可重入的同功能的函数替代它.
但是重写printf()函数有一定的困难,
折衷的办法是,只在一个任务中使用printf() 比如统计任务每秒printf()一次,输出一些运行信息,
其它任务如果要使用printf(),则通过简单的给全局变量赋值传递值,集中到统计任务打印.
毕竞printf()大多数情况都是用于调试, 将就一下它也没什么.
angalp
发表于 2024-10-19 21:37:51
还没接触到OS,学习学习!
远行的鹿
发表于 2024-10-19 21:54:22
tzz1983 发表于 2024-10-19 19:02
打印的串口由P30\P31切换到其他端口,众口难调, 使用者可以自己作简单更改.
Keil C51大多数库函数都是不 ...
非常感谢,又重新学习了一下c51的函数变量内存分配,原来c51函数默认是不可重入的呀,之前一直在标准C/C++编译器下写代码,一般函数都是可重入的。
giveyou
发表于 2024-11-1 11:00:17
{:4_165:}{:4_165:}{:4_165:}
bkeuqoaq
发表于 2024-11-1 13:12:41
51跑OS就是瞎搞,51本身的架构不适合OS