我尝试使用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(( 之前退出,因此 text[] 实际上不再存在。注释掉的代码只是按值传递第一个元素,所以没关系,但是如果你传递字符串的地址,在执行 callback(( 期间字符串必须仍然"活动"。尝试在 main(( 之前定义 text[]。- 狗狗