CubeMx+FreeRtos_Queues

Step1:  可选择外部晶振, 和TIM1时钟源(FreeRtos默认使用systick时钟源避免冲突)。

再配置时钟树。

Step2: 打开FreeRtos ,并创建三个线程。消息队列CubeMx生成存在BUG,这里使用手写。

Step3: 创建完程序后先定义,并创建一个 消息队列。至此创建完毕,后可使用xQueueSend() 与xQueueReceive() 往消息队列中发送数据和,读取数据。

例子:

任务02:

任务03:

现象:

扩充:

本例子仅使用了xQueueSend(); 与xQueueReceive();两个入队与出队的函数。其余函数如下图所示:

浅析本历程所使用的 三个函数 :

xQueueCreate:

原型:
xQueueHandle xQueueCreate( 
   unsigned portBASE_TYPE uxQueueLength, 
   unsigned portBASE_TYPE uxItemSize 
);
uxQueueLength队列中包含最大项目数量。
uxItemSize队列中每个项目所需的字节数。项目通过复制而不是引用排队,因为,所需的字节数,将复制给每个项目。队列中每个项目必须分配同样大小。
struct tagMsgQueuePara
{
	xQueueHandle ParseQueueHandle;
}RamPara;
 
struct tagTaskQueueMessage
{	
    int Message;
};
 
RamPara = xQueueCreate(1, sizeof(struct tagTaskQueueMessage));
这样就创建了一个tagTaskQueueMessage结构体的空间

 xQueueSend:

原型:
 portBASE_TYPE xQueueSend( 
   xQueueHandle xQueue, 
   const void * pvItemToQueue, 
   portTickType xTicksToWait 
);
xQueue 处理将项目传递给队列
pvItemToQueue指向队列中放置的项目的指针。项目的大小,由队列创建时定义,因为许多字节可以从 pvItemToQueue复制到队列的储存区域 
xTicksToWait最大时间量(任务应该锁住,等待队列中的可用空间)应该已经满了。如果设置为0,调用将立即返回。时间使用滴答周期来定义,因此如果需要,常量portTICK_RATE_MS应该用来转换实时时间

struct tagTaskQueueMessage
{	
    int Message;
};
struct tagTaskQueueMessage message;
 
message.Message = 1;
 
xQueueSend(RamPara,
		    (void *)&message,
			(portTickType)0);
沿用了上面的创建,这样就入队了。

  xQueueRece:

原型:
portBASE_TYPE xQueueReceive( 
  xQueueHandle xQueue, 
  void *pvBuffer, 
  portTickType xTicksToWait 
);
pxQueue将要接收项目的队列句柄
pvBuffer指向将要复制接收项目的缓冲器的指针。
xTicksToWait任务中断并等待队列中可用空间的最大时间,应该是满的。如果设置为0,调用将立刻返回。时间在片区间中定义,如果需要,portTICK_RATE_MS常量用来转换为实际时间。
如果 INCLUDE_vTaskSuspend 定义为1 ,指定的中断时间( portMAX_DELAY) 将导致任务无限期中断(没有时间溢出)。

struct tagTaskQueueMessage
{	
    int Message;
};
struct tagTaskQueueMessage message1;
 
xQueueReceive(RamPara,
			(void *)&message1,
			0xffff);
沿用上面的,,这样就出队获取了数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值