一个奇怪的问题暂时不能理解先记录一下
硬件环境 STM32F103 软件环境 RT-Thread
我在main函数里新建了两个线程``,赋予了两个线程不同的优先级。代码如下:
int main (void)
{
test_mq = rt_mq_create("test_mq", /*名字*/
40, //长度
20, //容量
RT_IPC_FLAG_FIFO); //队列模式
gpio_thread = //测试线程1
rt_thread_create("GPIO",
gpio_thread_entry,
RT_NULL,
512,
3,
2);
if (gpio_thread != RT_NULL)
rt_thread_startup(gpio_thread);
else
return -1;
uart_thread = //测试线程2
rt_thread_create("UART",
uart_thread_entry,
RT_NULL,
512,
4,
2);
if (gpio_thread != RT_NULL)
rt_thread_startup(uart_thread);
else
return -1;
}
然后我在两个线程里等待同一个信号量,并且是一直等待的状态,这个信号量会在串口接收中断里面赋值。
两个接收线程代码如下:
static void gpio_thread_entry(void *parament)
{
u8 RecData;
while(1)
{
rt_mq_recv(test_mq,
&RecData,
1,
RT_WAITING_FOREVER);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
rt_thread_delay(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
rt_thread_delay(100);
}
}
static void uart_thread_entry(void *parament)
{
u8 SendData;
while(1)
{
Usart_SendString(USART1,"123456");
rt_thread_delay(1000);
rt_mq_send(test_mq,
&SendData,
1);
rt_thread_delay(1000);
}
}
我用串口间隔5秒发送一个数据,按照我的理解,应该每次都是高优先级的线程能查询到信号量里的数据。
5s的间隔时间,应该两个线程都就绪了,然后应该是高优先级线程优先响应。
但是在实际执行过程中,是两个线程轮流响应。