C语言实现软件定时器模拟SysTick 1ms 定时
#include <stdio.h>\n#include <stdlib.h>\n#include <signal.h>\n#include <sys/time.h>\n\n#define TIMER_INTERVAL_MS 1\n\nvolatile unsigned int g_timer_counter = 0;\n\nvoid timer_handler(int signum)\n{\n g_timer_counter++;\n}\n\nvoid start_timer()\n{\n struct itimerval timer;\n \n // 设置定时器间隔为1ms\n timer.it_interval.tv_sec = 0;\n timer.it_interval.tv_usec = TIMER_INTERVAL_MS * 1000;\n \n // 设置定时器开始时间为1ms\n timer.it_value.tv_sec = 0;\n timer.it_value.tv_usec = TIMER_INTERVAL_MS * 1000;\n \n // 注册定时器处理函数\n signal(SIGALRM, timer_handler);\n \n // 启动定时器\n setitimer(ITIMER_REAL, &timer, NULL);\n}\n\nvoid stop_timer()\n{\n struct itimerval timer;\n \n // 清空定时器\n timer.it_interval.tv_sec = 0;\n timer.it_interval.tv_usec = 0;\n timer.it_value.tv_sec = 0;\n timer.it_value.tv_usec = 0;\n \n setitimer(ITIMER_REAL, &timer, NULL);\n}\n\nint main()\n{\n start_timer();\n \n while (1)\n {\n // 每1s打印一次定时器计数值\n if (g_timer_counter >= 1000)\n {\n printf("Timer counter: %d\n", g_timer_counter);\n g_timer_counter = 0;\n }\n }\n \n stop_timer();\n \n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/p2N5 著作权归作者所有。请勿转载和采集!