十二月的肖邦 发表于 2018-6-7 22:12:39

RTX5消息队列接口使用疑问

1、osMessageQueuePut接口在中断内部使用是无效的,但翻看了cmsis_os2.h中有关消息队列的接口,并未找到有专门用于中断中的接口,因此问下硬汉,是否有专用于中断的putmsg接口

2、题外话:我的目的是想省去自己做一个全局ringbuffer去接收串口的数据,请问硬汉,中断中直接使用OS自带的消息队列是否为最常用的方式

eric2013 发表于 2018-6-8 11:03:14

1、此贴末尾
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85578&extra=page%3D1%26filter%3Dtypeid%26typeid%3D83

2、可以。

十二月的肖邦 发表于 2018-6-8 17:02:08

eric2013 发表于 2018-6-8 11:03
1、此贴末尾
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85578&extra=page%3D1%26filter%3Dty ...

osMessageQueuePut接口在中断内部使用测试是无效的呀

eric2013 发表于 2018-6-8 17:02:55

十二月的肖邦 发表于 2018-6-8 17:02
osMessageQueuePut接口在中断内部使用测试是无效的呀

那就是你使用错误了,看看正确创建了没。

十二月的肖邦 发表于 2018-6-8 18:01:27

eric2013 发表于 2018-6-8 17:02
那就是你使用错误了,看看正确创建了没。

我在俩任务中可以自由收发,Put丢进中断就歇菜!!!!

eric2013 发表于 2018-6-8 18:06:19

十二月的肖邦 发表于 2018-6-8 18:01
我在俩任务中可以自由收发,Put丢进中断就歇菜!!!!

这种基础问题,尝试自己解决下。:handshake

YTFZ 发表于 2018-6-13 11:18:08

十二月的肖邦 发表于 2018-6-8 18:01
我在俩任务中可以自由收发,Put丢进中断就歇菜!!!!

能使用,但是根据手册在中断内使用的话超时接收等待必须是0~

十二月的肖邦 发表于 2018-6-13 14:15:48

YTFZ 发表于 2018-6-13 11:18
能使用,但是根据手册在中断内使用的话超时接收等待必须是0~

我好像是null,直接用的默认值,晚上回去试试

bigyang 发表于 2020-9-9 15:17:10

想问一下,lz解决了么是0的问题么?

bigyang 发表于 2020-9-9 15:18:22

十二月的肖邦 发表于 2018-6-13 14:15
我好像是null,直接用的默认值,晚上回去试试

请问,解决了么,是NULL问题么?

eric2013 发表于 2020-9-9 17:30:05

bigyang 发表于 2020-9-9 15:18
请问,解决了么,是NULL问题么?

他的和你的不同,他的是RTX5,你的是RTX4

adlu 发表于 2020-11-18 17:28:47

虽然这个帖是两年多以前发的,但是还是有必要回复一下,方便后来的阅读者。

因为最近在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。

eric2013 发表于 2020-11-19 08:13:52

adlu 发表于 2020-11-18 17:28
虽然这个帖是两年多以前发的,但是还是有必要回复一下,方便后来的阅读者。

因为最近在STM32上使用FreeR ...

这个帖子专门整理了此问题,更加简单易理解

第12章 FreeRTOS中断优先级配置(重要)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=21094&fromuid=58
(出处: 硬汉嵌入式论坛)

a13421364618 发表于 2020-12-8 11:21:30

能在中断用,但是超时参数必须为0,
页: [1]
查看完整版本: RTX5消息队列接口使用疑问