主题 : 我看了一些人的UCOS2的移植,好多错误一样的 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 50907
精华: 0
发帖: 42
金钱: 215 两
威望: 43 点
贡献值: 0 点
综合积分: 84 分
注册时间: 2011-06-27
最后登录: 2018-02-08
楼主  发表于: 2012-02-29 17:33

 我看了一些人的UCOS2的移植,好多错误一样的

为什么我看到的代码都一样的?
然后错误都一样的,
我知道很多人要说你们运行了没出错,那是因为你们的UCOS系统太小,
我就说一个地方,大家自己看有没对,就是临界状态的进入和退出,R0的值被覆盖了,

我自己前段时间也有空,写了个OS,无优先级个数限制,无任务个数限制,支持每个任务不同时间片长度,支持任务的动态创建,动态销毁,

但是有个地方还有点问题,需要在IDLE里检测才通过,
级别: 新手上路
UID: 64689
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2012-03-08
最后登录: 2012-03-08
1楼  发表于: 2012-03-08 16:12
#if      OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()  (cpu_sr = OSCPUSaveSR())    /* Disable interrupts                        */
#define  OS_EXIT_CRITICAL()   (OSCPURestoreSR(cpu_sr))    /* Restore  interrupts                       */
#endif
r0可能被覆盖,可是有cpu_sr 保存了其值啊,cpu_sr 参数会放在r0中,这一点没有问题吧。
级别: 侠客
UID: 4162
精华: 2
发帖: 41
金钱: 320 两
威望: 122 点
贡献值: 11 点
综合积分: 122 分
注册时间: 2009-03-01
最后登录: 2015-09-12
2楼  发表于: 2012-03-11 18:46
google   ATPCS
级别: 新手上路
UID: 50907
精华: 0
发帖: 42
金钱: 215 两
威望: 43 点
贡献值: 0 点
综合积分: 84 分
注册时间: 2011-06-27
最后登录: 2018-02-08
3楼  发表于: 2012-03-14 17:39

 回 1楼(kilisky) 的帖子

请注意,
这是进入临界的状态,而不是函数调用,
在你进入临界状态的后面的代码有可能会用到R0,这时候的R0你是在cpu_sr 中,
这时候的cpu_sr 你不能说是那个具体的寄存器,你只能确定这个值保存到了一个栈空间中