c - 如何将指针参数传递给CMSIS-RTOS虚拟定时器中的回调函数

标签 c timer virtual point rtos

我尝试使用 CMSIS-RTOS 虚拟计时器定期调用发送“hello world!”的函数。通过串口连接到PC。我可以正确地将一个单词传递给函数,但无法传递指针!我不知道出了什么问题。也许是 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[] 实际上不再存在。注释掉的代码只是按值传递了第一个元素,所以没关系,但是如果传递字符串的地址,则在执行回调()期间该字符串必须仍然“事件”。尝试在 main() 之前定义 text[]。 – 狗诺狗

关于c - 如何将指针参数传递给CMSIS-RTOS虚拟定时器中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422942/

相关文章:

c - 为什么会出现错误: incompatible types when assigning to type 'P_Name_t' from type 'UINT8 *'

java - 如何每天从 Java 运行任务?

c++ - 如果我在明确的情况下使用指针,编译器可以内联虚函数吗?

c++ - 如何在 linux 上创建虚拟 CAN 端口? (C++)

c - C 编程中出现的奇怪答案

c - 链接器/编译器/预处理问题

c++ - GTK 窗口配置事件未传播

delphi - TTimer 未触发

javascript 计时器显示自下订单以来的时间滴答

c++ - 调用虚函数时的奇怪行为