• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

CUBE生成的FreeRTOS中osSignalWait问题

apleilx 2018-08-08 浏览量:2605
CUBE生成的工程包含FreeRTOS 里面的任务通知接口osSignalWait()在接收到事件后不会自动清除已处理的位,也没有清除函数,怎么解决?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 正常情况下,调用osSignalWait之后会把信号复位,如果后面还有信号被置位,线程就可以继续执行,你可以读osEvent.value.signals的值来获取哪个标志被置位。任何一个线程都可以置位或清除另外一个线程的信号:
    int32_t osSinalSet(osThreadId thread_id int32_t signals);

    int32_t osSignalClear(osThreadId thread_id int32_t signals);


    • 发布于 2018-08-08
    • 举报
    • 评论 1
    • 0
    • 0
apleilx 回复了 Angel_YY:之前用RTX的时候确实会自动清除。但ST这个FreeRTOS并没有清除,刚开始以为发送信号量的程序有问题,后来测试发放任务只发一次,然后用osDelay阻塞掉,接收信号量的任务竟然一直有信号,才知道它是没自动清除的。另外freeRTOS的osSignalClear函数不可用。 回复

其他答案 数量:3
  • 使用命令osSignalClear是可以清除信号的,这个是freertos自带的功能,怎么会不可用
    • 发布于2018-08-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个可以用ossignalclear清除信号,你要检查一下你的这个指令是否使用正确
    • 发布于2018-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接用OSSingnalClaer这个指令就可以清楚信号,看看是不是你的使用方法有问题
    • 发布于2018-08-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

CUBE生成的FreeRTOS中osSignalWait问题