Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CMSIS-RTOS虚拟定时器中向回调函数传递指针参数_C_Timer_Virtual_Point_Rtos - Fatal编程技术网

如何在CMSIS-RTOS虚拟定时器中向回调函数传递指针参数

如何在CMSIS-RTOS虚拟定时器中向回调函数传递指针参数,c,timer,virtual,point,rtos,C,Timer,Virtual,Point,Rtos,我尝试使用CMSIS-RTOS虚拟定时器定期调用一个函数,通过串口向PC发送“hello world!”。我可以正确地向函数传递一个单词,但未能传递指针!我不知道出了什么问题。可能是CMSIS-RTOS的局限性 “H”通过注释部分代码发送回PC,这正是我想要的。然而,现在在这段代码中,我尝试将数组指针传递给回调函数,一个“P”被发送回PC。为什么??我的代码错了吗 void callback(void const *param); osTimerDef(timer_handle, callbac

我尝试使用CMSIS-RTOS虚拟定时器定期调用一个函数,通过串口向PC发送“hello world!”。我可以正确地向函数传递一个单词,但未能传递指针!我不知道出了什么问题。可能是CMSIS-RTOS的局限性

“H”通过注释部分代码发送回PC,这正是我想要的。然而,现在在这段代码中,我尝试将数组指针传递给回调函数,一个“P”被发送回PC。为什么??我的代码错了吗

void callback(void const *param);
osTimerDef(timer_handle, callback);
void callback(void const *param){
    uint8_t *t=(uint8_t *)param;
    SER_Send(t, 1);
}

//void callback(void const *param){
//  uint8_t t = (uint8_t)param;
//  SER_Send(&t, 1);
//}

int main (void) {
    uint8_t text[]="Hello world!";
    osTimerId timer = osTimerCreate(osTimer(timer_handle), osTimerPeriodic,   (void *)text);
//  osTimerId timer = osTimerCreate(osTimer(timer_handle), osTimerPeriodic, (void *)text[0]);

SystemCoreClockUpdate(); 

osKernelInitialize ();                    // initialize CMSIS-RTOS
SER_Config(UART0);  
SER_Init(9600);

osTimerStart(timer, 500);
osKernelStart ();                         // start thread execution 

}

看起来main()函数在回调()执行之前退出,因此文本[]实际上不再存在。注释掉的代码只是按值传递第一个元素,所以这无关紧要,但如果传递字符串的地址,则在执行callback()期间字符串必须仍然是“活动的”。尝试在main()之前定义文本[]dognotdog

seru Send的声明是什么?看起来main()函数在回调()执行之前退出,因此文本[]实际上不再存在。注释掉的代码只是按值传递第一个元素,所以这无关紧要,但如果传递字符串的地址,则在执行callback()期间字符串必须仍然是“活动的”。尝试在main()之前定义文本[]。是的,您是对的。当我全局定义文本[]时,它工作正常。谢谢有一件事我不太明白。当注释掉的代码通过值将第一个元素传递给虚拟计时器时,虚拟计时器(可能是线程???)将始终保持该值??因为在我的测试中,传递的值会定期发送回终端。