读那啥手册的时候上面说任务间切换容易造成变量访问的问题,拿了printf举例用了互斥量和关中断解决这个问题,但是他说都有问题,最终给了一个方案说是守护任务,利用队列,然后此任务拥有单独对printf的写权限,这样就不会造成冲突,但是他给的代码没有看太懂,自己实现了一个版本,
xPrintQueue = xQueueCreate( 9, sizeof( char * ) );
定义队列
static void AppTask(void* parameter)
{
u16 *led=(u16*)parameter;
char *s="hhhhhdadda";
u16 a=1234;
while (1)
{
led_on( *led);
vTaskDelay(500);
led_off(*led);
vTaskDelay(500);
xQueueSendToBack(xPrintQueue,&s,2);
xQueueSendToBack(xPrintQueue,&a,2);//因为队列好像要copy so应该要有一个实际变量地址
}
}
这个是调用函数由于,指针,复制问题我卡了很久,而其我实现的printf只能单一数据,不能字符,和数字一起用,So,我觉得还是用互斥吧
static void bsp_printf(void* parameter)
{
char *pcMessage=NULL;
while (1)
{
xQueueReceive(xPrintQueue,&pcMessage,portMAX_DELAY);
printf("%s\n",pcMessage);
//printf("%d\n",pcMessage);
}
}