RtosTimerをクラス内で使うテスト

Dependencies:   mbed-rtos mbed

Committer:
ryood
Date:
Mon May 30 10:54:59 2016 +0000
Revision:
0:9bbbd58541be
Child:
1:747445d49c3d
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:9bbbd58541be 1 #include "mbed.h"
ryood 0:9bbbd58541be 2 #include "rtos.h"
ryood 0:9bbbd58541be 3
ryood 0:9bbbd58541be 4 class TestClass
ryood 0:9bbbd58541be 5 {
ryood 0:9bbbd58541be 6 public:
ryood 0:9bbbd58541be 7 TestClass(uint32_t _updateTime) : updateTime(_updateTime)
ryood 0:9bbbd58541be 8 {
ryood 0:9bbbd58541be 9 //NOTE: The RTOS hasn't started yet, so we can't create the internal thread here
ryood 0:9bbbd58541be 10 }
ryood 0:9bbbd58541be 11
ryood 0:9bbbd58541be 12 void run() {
ryood 0:9bbbd58541be 13 timer = new RtosTimer(&TestClass::threadHelper, osTimerPeriodic, (void *)this) ;
ryood 0:9bbbd58541be 14 timer->start(updateTime);
ryood 0:9bbbd58541be 15 }
ryood 0:9bbbd58541be 16
ryood 0:9bbbd58541be 17 void stop() {
ryood 0:9bbbd58541be 18 timer->stop();
ryood 0:9bbbd58541be 19 delete timer;
ryood 0:9bbbd58541be 20 }
ryood 0:9bbbd58541be 21
ryood 0:9bbbd58541be 22 private:
ryood 0:9bbbd58541be 23 uint32_t updateTime;
ryood 0:9bbbd58541be 24 RtosTimer* timer;
ryood 0:9bbbd58541be 25
ryood 0:9bbbd58541be 26 static void threadHelper(const void* arg) {
ryood 0:9bbbd58541be 27 printf("In threadHelper()\r\n");
ryood 0:9bbbd58541be 28
ryood 0:9bbbd58541be 29 //Cast the argument to a TestClass instance pointer
ryood 0:9bbbd58541be 30 TestClass* instance = (TestClass*)arg;
ryood 0:9bbbd58541be 31
ryood 0:9bbbd58541be 32 //Call the thread method for the TestClass instance
ryood 0:9bbbd58541be 33 instance ->threadMethod();
ryood 0:9bbbd58541be 34 }
ryood 0:9bbbd58541be 35
ryood 0:9bbbd58541be 36 void threadMethod() {
ryood 0:9bbbd58541be 37 printf("In threadMethod()\r\n");
ryood 0:9bbbd58541be 38 }
ryood 0:9bbbd58541be 39 };
ryood 0:9bbbd58541be 40
ryood 0:9bbbd58541be 41 int main()
ryood 0:9bbbd58541be 42 {
ryood 0:9bbbd58541be 43 printf("\n\n\r** Using An RtosTimer inside a class test **\r\n");
ryood 0:9bbbd58541be 44
ryood 0:9bbbd58541be 45 while (true) {
ryood 0:9bbbd58541be 46 printf("In main loop\r\n");
ryood 0:9bbbd58541be 47 TestClass test(1000);
ryood 0:9bbbd58541be 48 test.run();
ryood 0:9bbbd58541be 49 Thread::wait(10000);
ryood 0:9bbbd58541be 50 test.stop();
ryood 0:9bbbd58541be 51 }
ryood 0:9bbbd58541be 52 }