1. 總括
Task的參數(shù)輸入方式就是將外部數(shù)據(jù)輸入到xTaskCreate()
的void * const pvParameters
參數(shù)中去,并且有以下幾點(diǎn)特性:
- 可以輸入任何類型數(shù)據(jù)
- 輸入數(shù)據(jù)必須強(qiáng)制轉(zhuǎn)換為
void *
類型數(shù)據(jù) - 以地址形式輸入
2. 輸入流程
- 定義一個變量
- 將變量強(qiáng)制轉(zhuǎn)換為
void *
類型 - 將變量以地址形式輸入到
xTaskCreate()
的void * const pvParameters
參數(shù)中去 - 在Task中定義一個對應(yīng)數(shù)據(jù)類型的指針型變量
- 在Task的
pvParameters
參數(shù)強(qiáng)制轉(zhuǎn)換為對應(yīng)數(shù)據(jù)類型的指針型,并賦值給指針型變量
3. 示例
1.普通變量
void Task_name(void *pvParam)
{
int * pInt; //定義指針變量
pInt = (int *)pvParam; //將pvParam賦值給pInt
while(1){
printf("pvParam = %d \n",*pInt); //因?yàn)閜Int是地址,使用時(shí)要先獲取地址對應(yīng)的值
vTaskDelay(1000);
}
}
void main()
{
int num = 1; //定義輸入變量
xTaskCreate(Task_name,"Task_name",512,(void *)&num,2,NULL); //轉(zhuǎn)換類型,輸入變量地址
}
2. 數(shù)組
void Task_name(void *pvParam)
{
int * pArray; //定義指針變量
pArray = (int *)pvParam; //將pvParam賦值給pArray
while(1){
printf("First element of array = %d \n",*pArray); //因?yàn)閜Array是地址,使用時(shí)要先獲取地址對應(yīng)的值
printf("Second element of array = %d \n",*(pArray+1)); //因?yàn)閜Array是地址,使用時(shí)要先獲取地址對應(yīng)的值
vTaskDelay(1000);
}
}
void main()
{
int array[2] = {1,2}; //定義輸入變量
xTaskCreate(Task_name,"Task_name",512,(void *)array,2,NULL); //轉(zhuǎn)換類型,數(shù)組名本就是地址,不用再取地址
}
3. 結(jié)構(gòu)體
typedef struct A_STRUCT{ //創(chuàng)建一個結(jié)構(gòu)體
int num1;
int num2;
}xStruct;
void Task_name(void *pvParam)
{
xStruct *pStruct; //定義指針型結(jié)構(gòu)體
pStruct = (xStruct *)pvParam; //將pvParam賦值給pStruct
while(1){
printf("First variable of struct = %d \n",pStruct->num1); //使用->運(yùn)算符,訪問指針型結(jié)構(gòu)體中的變量
printf("Second variable of struct = %d \n",pStruct->num2);
vTaskDelay(1000);
}
}
void main()
{
xStruct xStruct_test = {0,1}; //定義一個結(jié)構(gòu)體變量
xTaskCreate(Task_name,"Task_name",512,(void *)&xStruct_test,2,NULL); //轉(zhuǎn)換類型,輸入變量地址
}
4. 數(shù)組
strict const char *pcTxt = "Holle World!";
void Task_name(void *pvParam)
{
char * pTxt; //定義指針變量
pTxt = (char *)pvParam; //將pvParam賦值給pTxt
while(1){
printf("pvParam = %s \n",pTxt);
vTaskDelay(1000);
}
}
void main()
{
xTaskCreate(Task_name,"Task_name",512,(void *)pcTxt,2,NULL); //轉(zhuǎn)換類型,輸入變量地址
}