【发布时间】:2021-02-19 05:05:37
【问题描述】:
我想创建一个带有按钮的任务,该任务将一个字符串发送到一个队列并创建另一个任务(这也可以是具有较低优先级的单独任务),如果其变量与队列中的字符串。否则系统应保持空闲模式。我对 freertos 很陌生,即使没有编译错误,Led 也不会在下面的代码中闪烁。如果可能的话,我还想将数据类型从 char 替换为 string。 (select和zyRxBuff来源不同,为简单起见写如下)
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "queue.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
处理程序;
QueueHandle_t myQueue = NULL;
TaskHandle_t QTASK1 = NULL;
TaskHandle_t QTASK2 = NULL;
原型;
void Qsender(void* p);
void Qreceiver(void* p);
主块;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET)
{
xTaskCreate(Qsender, "SendingTask", 200, NULL, 1, &QTASK1);
vTaskStartScheduler();
}
while (1) {};
}
发送函数;
void Qsender(void* p)
{
char select[10]= "BlinkLed";
myQueue = xQueueCreate(1, sizeof(select));
xQueueSend(myQueue, (void*) &select, (TickType_t)10);
if (myQueue != 0)
{
xTaskCreate(Qreceiver, "ReceivingTask", 200, NULL, 1, &QTASK2);
}
}
接收函数;
void Qreceiver(void* p)
{
char myRxBuff[10];
char zyRxBuff[10]="BlinkLed";
xQueueReceive(myQueue, &myRxBuff, (TickType_t)50);
if ( myRxBuff == zyRxBuff)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
HAL_Delay(500);
}
}
空闲函数;
void vApplicationIdleHook(void){__WFI();};
【问题讨论】:
-
你在用什么,
C或C++。编辑帖子以仅保留您正在使用的标签。您是否编译并看到警告或错误?如果是这样,请发布它们以显示它们出现在代码中的位置。