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, 8 months ago.
Ticker attach_us with <vector> messes the first item of <vector> up
I have 2 classes: Sample that holds a value of i and Trier that has a couple of Sample's in vector<Sample*> vec. The code below sends the values of i from a Sample in Trier::vec to the terminal via STM32 development board. The problem is as follows:
If you Trier::printI() just before before Ticker::attach_us(), I get the right value of i, but in the Ticker::attach_us, I get weird value printed in the terminal for vec[0]. The funny thing is that if you replace vec[0]->getI() in Trier::printI() to index of 1 like this vec[1]->getI(), the value of i for the 2nd Sample in vec is printed fine.
I broke my head on this. Could anyone tell what the heck if going on?
main.cpp
#include <iostream> #include <vector> #include "mbed.h" class Sample { public: Sample(int i) : i(i) {} int getI() {return i;} protected: int i; }; class Trier { protected: vector<Sample*> vec; public: Trier(Sample* s1, Sample* s2, Sample* s3) { vec.push_back(s1); vec.push_back(s2); vec.push_back(s3); } void printI() { printf("vector's i = %i\n", vec[0]->getI()); } vector<Sample*> getVec() {return vec;} }; Ticker t; int main() { Sample* s1; Sample* s2; Sample* s3; s1 = new Sample(10); s2 = new Sample(20); s3 = new Sample(30); Trier trier(s1, s2, s3); trier.printI(); t.attach_us(callback(&trier, &Trier::printI), 1000000); }
1 Answer
6 years, 8 months ago.
Hello Dima,
I believe you need an infinite while loop running when using Ticker. For instance:
Trier trier(s1, s2, s3); trier.printI(); t.attach_us(callback(&trier, &Trier::printI), 1000000); } //new code while(1){ }
I added the empty while loop and it was working properly. Hope this helps!
-Karen, team Mbed
If this solved your question, please make sure to click the "Thanks" link below!
Hi Karen,
To say that you saved a poor man's life is to say nothing. :-) Thank you VERY much, Karen. I wonder why the while loop plays a role here? Do you have any clues?
posted by 27 Jun 2018