- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2025-04-30 07:46:22
荣誉版主
- 积分
- 2319
|
发表于 2024-7-7 15:32:05
|
显示全部楼层
本帖最后由 tzz1983 于 2024-7-7 19:28 编辑
全部都是用全局重入, 比较省事一点.
暂时没有发现问题, 连续运行了几天, 另外加大负荷, 把MSC例程加进去一并测试, 也通过.
之前遇到的问题应该是编译器对指针的处理上有瑕,同样的代码, 不同的结果, 很难找出问题 ,像大海捞针一样的.
我现在是强制OS的结构体和指针用2字节指针, 这样它想错也没有第三字节给他玩, 暂时没有问题, 和51核和做法差不多. 如下代码:
#if OS_USE_XDATA
#define OsMemType xdata
#else
#define OsMemType edata
#endif
typedef struct os_tcb {
......//省略
}OsMemType OS_TCB;
这样以后, 用 OS_TCB 定义的指针是两字节指针,
用 OS_TCB 定义的全局变量会存在 OsMemType 指定的内存类型
这样做有一个缺点 , OS_TCB 如果定义局部变量, 可能实际存储类型与 OsMemType 并不一至,
所幸的是, UCOS从来都没有用 OS_TCB 来定义局部变量, 局部只有指针.
|
|