Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************
- Online C Compiler.
- Code, Compile, Run and Debug C program online.
- Write your code in this editor and press "Run" button to compile and execute it.
- *******************************************************************************/
- #include <stdio.h>
- #include <sys/time.h>
- #include <inttypes.h>
- uint32_t millis(void) {
- struct timeval tv;
- gettimeofday(&tv,NULL);
- return (((uint32_t)tv.tv_sec)*1000)+(tv.tv_usec/1000);
- }
- enum states {idle, start, t1_expired,t2_expired,t3_expired,t4_expired};
- enum states timer_state = idle;
- uint32_t delay = 0;
- uint32_t last_time = 0;
- void timer_start(void){
- timer_state = start;
- }
- void timer_run(void){
- if (millis() - last_time < delay){
- return;
- }
- switch(timer_state){
- case idle:
- delay = 0;
- last_time = 0;
- break;
- case start:
- delay = 10; //t1
- last_time = millis();
- printf("start at %u \n", millis());
- timer_state = t1_expired;
- break;
- case t1_expired:
- last_time += delay; // not use millis() to not accumulate time error
- delay = 20;//t2
- printf("t1 expired at %u \n", millis());
- timer_state = t2_expired;
- break;
- case t2_expired:
- last_time += delay;
- delay = 30;//t3
- printf("t2 expired at %u \n", millis());
- timer_state = t3_expired;
- break;
- case t3_expired:
- last_time += delay;
- delay = 40;//t4
- printf("t3 expired at %u \n", millis());
- timer_state = t4_expired;
- break;
- case t4_expired:
- printf("t4 expired at %u \n", millis());
- timer_state = idle;
- break;
- default:
- printf("warning: default state %u \n", millis());
- timer_state = idle;
- break;
- }
- }
- int main()
- {
- timer_run();
- timer_start();
- while(timer_state != idle){
- timer_run();
- }
- printf("end");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement