gmaker 发表于 2024-9-21 17:02:04

本帖最后由 gmaker 于 2024-9-21 17:03 编辑

关于静态变量的问题
使用了TinyRTOS51V1.22   2024.05.09确实简洁精悍,但是我遇到个问题想咨询下,如下图,两个任务完全不相干.
但是当任务2的那个static去掉后变成局部变量.任务1的流水灯就全乱了,变成全部一起闪烁了.请问是必须都要用static标识吗?这样不是有点浪费内存吗?




fanxsp 发表于 2024-9-21 21:49:30

gmaker 发表于 2024-9-21 17:02
关于静态变量的问题
使用了TinyRTOS51V1.22   2024.05.09确实简洁精悍,但是我遇到个问题想咨询下,如下 ...

任务中的局部变量,是不能相互覆盖的。如果任务都用static局部静态变量,可以确保不会相互覆盖,就没有问题。如果不带static, 那么就有可能相互覆盖,必须通过设置链接器的Overlay选项来确保不同任务中的局部变量不会相互覆盖。


gmaker 发表于 2024-9-25 18:39:04


楼主大神,还有个问题请问下,事件标志服务有没有gitee什么的有更多例程,我是想一个Task做IO检测,检测到之后触发事件并传递Key值,另外一个TASK处理.适合用事件标志吗?

fanxsp 发表于 2024-9-25 19:45:53

本帖最后由 fanxsp 于 2024-9-25 19:52 编辑

gmaker 发表于 2024-9-25 18:39
楼主大神,还有个问题请问下,事件标志服务有没有gitee什么的有更多例程,我是想一个Task做IO检测,检测到之后 ...
如果要传递一个字节的Key值,可以用消息队列。用事件标志,也可以,但需要一个共享变量来传递Key值。

gmaker 发表于 2024-9-25 20:23:31

事件标志有例程吗什么时候调哪个函数

lyldzxx 发表于 2024-9-26 08:03:07

确实不错,应用一下试试

fanxsp 发表于 2024-9-26 09:10:27

本帖最后由 fanxsp 于 2024-9-26 10:39 编辑

gmaker 发表于 2024-9-25 20:23
事件标志有例程吗什么时候调哪个函数
事件标志服务函数
void OSInitEFlag(OStypeInt8u eID,OStypeInt8u value) : 设置事件标志初始值。
参数:eID - 事件标志ID value - 初始值
void OSWaitEFlagAny(OStypeInt8u eID,OStypeInt8u mask) : 等待事件标志(掩码指定的任意位),掩码指定的标志位都为
0则任务进入等待状态(任务阻塞)并进行任务切换,禁止延时服务时使用这个函数。
参数:eID - 事件标志ID mask - 掩码
void OSWaitEFlagAny(OStypeInt8u eID,OStypeInt8u mask,OStypeOfDelays ticks) :等待事件标志(掩码指定的任意
位),有超时服务,掩码指定的标志位都为0则任务进入等待状态(任务阻塞)并进行任务切换,使能延时服务时使用这个函数。
参数:eID - 事件标志ID mask - 掩码 ticks - 超时的节拍数 =0 永久等待
void OSWaitEFlagAll(OStypeInt8u eID,OStypeInt8u mask) :等待事件标志(掩码指定的所有位),掩码指定的标志位中的任
意位为0则任务进入等待状态(任务阻塞)并进行任务切换,禁止延时服务时使用这个函数。
参数:eID - 事件标志ID mask - 掩码
void OSWaitEFlagAll(OStypeInt8u eID,OStypeInt8u mask,OStypeOfDelays ticks) :等待事件标志(掩码指定的所有位),
有超时服务,掩码指定的标志位中的任意位为0则任务进入等待状态(任务阻塞)并进行任务切换,使能延时服务时使用这个函
数。
参数:eID - 事件标志ID mask - 掩码 ticks - 超时的节拍数 =0 永久等待
void OSWaitEFlagExact(OStypeInt8u eID,OStypeInt8u mask) :等待事件标志(和掩码完全匹配),事件标志和掩码不完全
匹配则任务进入等待状态(任务阻塞)并进行任务切换,禁止延时服务时使用这个函数。
参数:eID - 事件标志ID mask - 掩码
void OSWaitEFlagExact(OStypeInt8u eID,OStypeInt8u mask,OStypeOfDelays ticks) :等待事件标志(和掩码完全匹
配),有超时服务,事件标志和掩码不完全匹配则任务进入等待状态(任务阻塞)并进行任务切换,使能延时服务时使用这个函数。
参数:eID - 事件标志ID mask - 掩码 ticks - 超时的节拍数 =0 永久等待
OStypeInt8u OSReadEFlag(OStypeInt8u eID) :读事件标志,不改变事件标志状态,可以在中断中调用。
参数:eID - 事件标志ID
返回:事件标志值
void OSIntSetEFlag(OStypeInt8u eID,OStypeInt8u mask) :在中断中设置事件标志,所有等待事件标志的任务就绪。
参数:eID - 事件标志ID mask - 掩码
void OSTaskSetEFlag(OStypeInt8u eID, OStypeInt8u mask) :在任务中设置事件标志,所有等待事件标志的任务就绪。
参数:eID - 事件标志ID mask - 掩码
void OSClrEFlag(OStypeInt8u eID, OStypeInt8u mask) :清除事件标志,不改变任务状态,事件标志不会自动清除,用户
负责在适当位置清除事件标志。
参数:eID - 事件标志ID mask - 掩码

详见manual.pdf

gmaker 发表于 2024-9-26 10:59:15

谢谢 ,这个我看到过,我自己摸索下吧.

Hzyy3939 发表于 2024-9-27 13:59:13

这个os还更新吗

fanxsp 发表于 2024-9-27 14:33:31

Hzyy3939 发表于 2024-9-27 13:59
这个os还更新吗

会继续更新
页: 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29
查看完整版本: 原创极简的51-MCU专用RTOS TinyRTOS51