Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 4 months ago.
EventQueue not working for a user defined callback
I am trying following program (marked within <<code>> My program <</code>>
).
The first two calls (see comment below) work. However the next call crashes with Hard-fault. This crashing statement uses a
user defined function. I am using NUCLEO-F103RB. I tried both online and offline. There is no difference.
#include "mbed.h" #include <stdio.h> DigitalOut led1(PB_15, 1); DigitalOut led2(PC_1, 1); DigitalOut led3(PC_6, 1); DigitalOut led4(PC_3, 1); DigitalOut led5(PC_0, 1); DigitalOut led6(PC_7, 1); void timerFunction() { led2 = !led2; } int main() { led1 = 1; EventQueue timer; //Following 2 lines calls are working timer.call(printf, "called immediately\n"); timer.call_every(2000, printf, "called periodically\n"); //Following line crashes timer.call_every(200, timerFunction); timer.dispatch(); while(true) { Thread::wait(500); led1 = !led1; } }
1 Answer
6 years, 4 months ago.
If you want to dispatch queue you need to create a Thread for that.
int main(){ EventQueue timer; Thread eventThread; eventThread.start(callback(&timer, &EventQueue::dispatch_forever)); timer.call_every(2000, printf, "called periodically\n"); while(1){ ... } }
Hi, I tried your code on my two Nucleos (F767 and L152) without a crash. You can try examples from https://os.mbed.com/docs/v5.9/reference/eventqueue.html
posted by Jan Kamidra 29 Jul 2018