使用ch32v208然后用freertos數(shù)據(jù)量API問(wèn)題

在使用數(shù)據(jù)流的時(shí)候,發(fā)現(xiàn)當(dāng)發(fā)送數(shù)據(jù)量已經(jīng)超過(guò)觸發(fā)值,接收函數(shù)還是沒(méi)把數(shù)據(jù)打印出來(lái),得是發(fā)送再發(fā)一次后才會(huì)與發(fā)送的打印數(shù)據(jù)一起打印出來(lái),但是我用win32運(yùn)行freertos跑同樣的代碼沒(méi)有這個(gè)問(wèn)題,不知道是否是printf函數(shù)的問(wèn)題


熱門(mén)產(chǎn)品 : CH390:以太網(wǎng)控制器芯片

/********************************** (C) COPYRIGHT *******************************

?* File Name? ? ? ? ? : main.c

?* Author? ? ? ? ? ? ?: WCH

?* Version? ? ? ? ? ? : V1.0.0

?* Date? ? ? ? ? ? ? ?: 2021/06/06

?* Description? ? ? ? : Main program body.

*********************************************************************************

* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.

* Attention: This software (modified or not) and binary are used for?

* microcontroller manufactured by Nanjing Qinheng Microelectronics.

*******************************************************************************/


/*

?*@Note

?task1 and task2 alternate printing

*/


#include "debug.h"

#include "FreeRTOS.h"

#include "task.h"

#include "string.h"

#include "queue.h"

#include "timers.h"

#include "stdlib.h"

#include "string.h"

#include "semphr.h"

#include "event_groups.h"

#include "stream_buffer.h"


/* Global define */

#define TASK1_TASK_PRIO? ? ?3

#define TASK1_STK_SIZE? ? ? 512

#define TASK2_TASK_PRIO? ? ?1

#define TASK2_STK_SIZE? ? ? 512

#define TASK3_TASK_PRIO? ? ?1

#define TASK3_STK_SIZE? ? ? 512



/* Global Variable */

TaskHandle_t Task2Handle = NULL;

TaskHandle_t Task3Handle = NULL;


StreamBufferHandle_t StreamBufferHandle = NULL;


/* SemaphoreHandle */

SemaphoreHandle_t printfSemaphoreHandle = NULL;


//#define MYPRINT(format, ...)? ? vTaskSuspendAll();portENTER_CRITICAL();printf(format, ##__VA_ARGS__);portEXIT_CRITICAL();xTaskResumeAll()

//#define MYPRINT(format, ...)? ? vTaskSuspendAll();printf(format, ##__VA_ARGS__);xTaskResumeAll()

#define MYPRINT(format, ...)? ? xSemaphoreTake(printfSemaphoreHandle,portMAX_DELAY);printf(format, ##__VA_ARGS__);xSemaphoreGive(printfSemaphoreHandle)

/*********************************************************************

?* @fn? ? ? GPIO_Toggle_INIT

?*

?* @brief? ?Initializes GPIOA.0/1

?*

?* @return? none

?*/

void GPIO_Toggle_INIT(void)

{

? GPIO_InitTypeDef? GPIO_InitStructure={0};


? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;

? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

? GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

? GPIO_Init(GPIOA, &GPIO_InitStructure);

}



/*********************************************************************

?* @fn? ? ? task1_task

?*

?* @brief? ?task1 program.

?*

?* @param? *pvParameters - Parameters point of task1

?*

?* @return? none

?*/


void task1_task(void *pvParameters)

{

? ? TickType_t xLastWakeTime = 0;

? ? xLastWakeTime = xTaskGetTickCount();

? ? while(1)

? ? {

? ? ? ? if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)

? ? ? ? {

? ? ? ? ? ? GPIO_SetBits(GPIOA, GPIO_Pin_0);

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? GPIO_ResetBits(GPIOA, GPIO_Pin_0);

? ? ? ? }

? ? ? ? vTaskDelayUntil( &xLastWakeTime, pdMS_TO_TICKS(1000));

? ? }

}


void task2_task(void *pvParameters)

{

? ? unsigned char StrTable[50] = {0};

? ? int16_t StrLength = 0;

? ? int16_t SendLength = 0;

? ? int16_t Count = 0;

? ? while(1)

? ? {

? ? ? ? vTaskDelay(pdMS_TO_TICKS(3000));

? ? ? ? Count++;

? ? ? ? StrLength = sprintf(StrTable,"StreamBuffer Test Count = %d",Count);

? ? ? ? SendLength = xStreamBufferSend(StreamBufferHandle,(void *)StrTable,StrLength,portMAX_DELAY);


? ? ? ? MYPRINT("Send: StrLength = %d? SendLength = %d\r\n",StrLength,SendLength);


? ? }

}


void task3_task(void *pvParameters)

{

? ? unsigned char StrTable[50] = {0};

? ? int16_t ReadLength = 0;

? ? while(1)

? ? {

? ? ? ? memset(StrTable,0x00,sizeof(StrTable));

? ? ? ? ReadLength = xStreamBufferReceive(StreamBufferHandle,(void *)StrTable,(sizeof(StrTable) - 1),portMAX_DELAY);

? ? ? ? MYPRINT("Read: ReadLength = %d String = %s\r",ReadLength,StrTable);

? ? }

}







/*********************************************************************

?* @fn? ? ? main

?*

?* @brief? ?Main program.

?*

?* @return? none

?*/

int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

? ? Delay_Init();

? ? USART_Printf_Init(115200);

? ? printf("SystemClk:%d\r\n",SystemCoreClock);

? ? printf("FreeRTOS Kernel Version:%s\r\n",tskKERNEL_VERSION_NUMBER);

? ? GPIO_Toggle_INIT();

? ? /* create two task */


? ? printf("uint8_t = %d , uint16_t = %d , size_t = %d \r\n",sizeof(uint8_t),sizeof(uint16_t),sizeof(size_t));


? ? StreamBufferHandle = xStreamBufferCreate(200,100);? ? ? //最大緩沖區(qū)為1000,大于50字節(jié)觸發(fā)

? ? if(StreamBufferHandle != NULL)

? ? {

? ? ? ? printf("Creat Success \r\n");

? ? }


? ? printfSemaphoreHandle = xSemaphoreCreateBinary();

? ? xSemaphoreGive(printfSemaphoreHandle);




? ? xTaskCreate((TaskFunction_t )task1_task,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (const char*? ? )"task1",

? ? ? ? ? ? ? ? ? ? ? ? ? ? (uint16_t? ? ? ?)TASK1_STK_SIZE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (void*? ? ? ? ? )NULL,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (UBaseType_t? ? )TASK1_TASK_PRIO,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (TaskHandle_t*? )NULL);

? ? xTaskCreate((TaskFunction_t )task2_task,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (const char*? ? )"task2",

? ? ? ? ? ? ? ? ? ? ? ? ? ? (uint16_t? ? ? ?)TASK2_STK_SIZE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (void*? ? ? ? ? )NULL,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (UBaseType_t? ? )TASK2_TASK_PRIO,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (TaskHandle_t*? )&Task2Handle);

? ? xTaskCreate((TaskFunction_t )task3_task,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (const char*? ? )"task3",

? ? ? ? ? ? ? ? ? ? ? ? ? ? (uint16_t? ? ? ?)TASK3_STK_SIZE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (void*? ? ? ? ? )NULL,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (UBaseType_t? ? )TASK3_TASK_PRIO,

? ? ? ? ? ? ? ? ? ? ? ? ? ? (TaskHandle_t*? )NULL);


? ? vTaskStartScheduler();

? ? while(1)

? ? {

? ? ? ? printf("shouldn't run at here!!\n");

? ? }

}







您好,可在每個(gè)打印函數(shù)打印時(shí)加個(gè)換行符(\)或在每個(gè)打印函數(shù)后面加個(gè)fflush(stdout)函數(shù)試一下


感謝3樓加上fflush(stdout)后確實(shí)可以了


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频