【求助】RTX51 Tiny函数的可重入问题

2020-01-12 17:24发布

目前在做的一个项目中,用到RTX51 Tiny,有一个疑问:在一个函数中调用os_wait(),或者os_switch_task()之后,os暂停当前task1,转向另外一个task2,在task2中的执行函数与task1中的函数可能构成Overlay关系吗???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
lcw_swust
1楼-- · 2020-01-12 22:26
虽然不了解RTX51 Tiny,但是也遇到过主函数与中断同时调用一个函数的情况,会出现问题,
主要因为编译器用全局变量代替局部变量。
此时要用到 reentrant ,将函数变成可重入,使局部变量放入堆栈中,两个地方同时调用也不会干扰。
(如果函数中用到了全局变量仍要小心)
如:
int fun(char a) reentrant  
{

}

如果要避免两个地方同时调用一个函数,也可以加一个标志用于等待,似乎可以用信号量还是啥?我也不太清楚了。
chenerbox2
2楼-- · 2020-01-13 00:23
 精彩回答 2  元偷偷看……
fsmcu
3楼-- · 2020-01-13 04:02
这个是非抢占式的,只要你自己保证在共用函数里面不放弃CPU,主动切换任务,基本就是可靠的了,不要担心重入问题
techbaby
4楼-- · 2020-01-13 05:58
用protothreads吧!这种汇编写的代码不了解清楚不敢用啊
xyz543
5楼-- · 2020-01-13 06:32
将此工程全部会用到的函数,都如二楼那样在后头加上 reentrant  估计就可以了。
pipilee
6楼-- · 2020-01-13 06:51
lcw_swust 发表于 2019-7-29 11:46
虽然不了解RTX51 Tiny,但是也遇到过主函数与中断同时调用一个函数的情况,会出现问题,
主要因为编译器用 ...

不是调用同一个函数啊。是在两个task中调用不同的函数,BL51会不会认为两个task中的函数没有调用关系,然后把他们的局部变量进行overlay。
我的疑惑是哪些情况下BL51进行overlay?我的理解是只要函数之间没有直接或间接调用BL51就可以overlay,不知道对不对。

一周热门 更多>