RTX5消息队列接口使用疑问
1、osMessageQueuePut接口在中断内部使用是无效的,但翻看了cmsis_os2.h中有关消息队列的接口,并未找到有专门用于中断中的接口,因此问下硬汉,是否有专用于中断的putmsg接口2、题外话:我的目的是想省去自己做一个全局ringbuffer去接收串口的数据,请问硬汉,中断中直接使用OS自带的消息队列是否为最常用的方式
1、此贴末尾
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85578&extra=page%3D1%26filter%3Dtypeid%26typeid%3D83
2、可以。 eric2013 发表于 2018-6-8 11:03
1、此贴末尾
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85578&extra=page%3D1%26filter%3Dty ...
osMessageQueuePut接口在中断内部使用测试是无效的呀 十二月的肖邦 发表于 2018-6-8 17:02
osMessageQueuePut接口在中断内部使用测试是无效的呀
那就是你使用错误了,看看正确创建了没。 eric2013 发表于 2018-6-8 17:02
那就是你使用错误了,看看正确创建了没。
我在俩任务中可以自由收发,Put丢进中断就歇菜!!!! 十二月的肖邦 发表于 2018-6-8 18:01
我在俩任务中可以自由收发,Put丢进中断就歇菜!!!!
这种基础问题,尝试自己解决下。:handshake 十二月的肖邦 发表于 2018-6-8 18:01
我在俩任务中可以自由收发,Put丢进中断就歇菜!!!!
能使用,但是根据手册在中断内使用的话超时接收等待必须是0~ YTFZ 发表于 2018-6-13 11:18
能使用,但是根据手册在中断内使用的话超时接收等待必须是0~
我好像是null,直接用的默认值,晚上回去试试 想问一下,lz解决了么是0的问题么? 十二月的肖邦 发表于 2018-6-13 14:15
我好像是null,直接用的默认值,晚上回去试试
请问,解决了么,是NULL问题么?
bigyang 发表于 2020-9-9 15:18
请问,解决了么,是NULL问题么?
他的和你的不同,他的是RTX5,你的是RTX4 虽然这个帖是两年多以前发的,但是还是有必要回复一下,方便后来的阅读者。
因为最近在STM32上使用FreeRTOS,在串口中断中使用osMessageQueuePut()发送消息到队列时,程序卡死了。
Debug发现,卡死的位置是vPortValidateInterruptPriority()的断言语句configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
搜索后,发现了这个帖子探究为什么FreeRTOS 有些API不能在中断服务函数中调用,转而需要调用带ISR的版本
也就是说,如果你要在中断函数中调用RTOS的API,那么就要求这个中断的优先级(ucCurrentPriority)大于或等于最大的系统调用优先级(ucMaxSysCallPriority)。
而ucMaxSysCallPriority的值,由宏定义configMAX_SYSCALL_INTERRUPT_PRIORITY决定,在FreeRTOS默认配置是5。
在CubeMX配置STM32的串口中断时,默认是0(优先级最高),所以导致configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );断言失败。
我将串口中断优先级改成5,就解决问题了。
当然,在中断中调用API,timeout参数必须为0。
adlu 发表于 2020-11-18 17:28
虽然这个帖是两年多以前发的,但是还是有必要回复一下,方便后来的阅读者。
因为最近在STM32上使用FreeR ...
这个帖子专门整理了此问题,更加简单易理解
第12章 FreeRTOS中断优先级配置(重要)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=21094&fromuid=58
(出处: 硬汉嵌入式论坛)
能在中断用,但是超时参数必须为0,
页:
[1]