# SoftTimer
使用链表创建了一个软件定时器, 理论上可以扩增至极大的数量.
## 如何使用 How to use?
1. 创建一个结构体, 用于定义软件定时器, 并对其通过api进行初始化, 用于设置指定的触发次数.
``` C
//创建定时器结构体
softTimer_t timer_1;
//设定定时触发值
softTimer_setup(&timer_1, 100);
```
2. 创建一个回调函数, 并将其注册进对应的软件定时器,用于在定时触发时,调用该回调函数.
``` C
//创建回调函数
void timer1Callback(){
static int counter = 0;
counter++;
printf("timer1 update : %d\r\n", counter);
}
//将回调函数注册进指定的软件定时器
softTimer_attach(&timer_1, timer1Callback);
```
3. 将定时器的tick节拍函数放置于一个稳定的定时中断之中.
``` C
//假设此处的定时中断为1ms触发一次, 则前文创建的软件定时器1为每100ms触发一次.
while(1){
delay_ms(1);
softTimer_tick();
}
```
## 完整示例 example
``` C
#include <stdio.h>
#include "unistd.h"
#include "softTimer.h"
void timer1Callback(){
static int counter = 0;
counter++;
printf("timer1 update : %d\r\n", counter);
}
void timer2Callback(){
static int counter = 0;
counter++;
printf("timer2 update : %d\r\n", counter);
}
void timer3Callback(){
static int counter = 0;
counter++;
printf("timer3 update : %d\r\n", counter);
}
int main() {
softTimer_setup(&timer_1, 1);
softTimer_setup(&timer_2, 2);
softTimer_setup(&timer_3, 3);
softTimer_attach(&timer_1, timer1Callback);
softTimer_attach(&timer_2, timer2Callback);
softTimer_attach(&timer_3, timer3Callback);
while(1){
sleep(1); //定时时间为1s
softTimer_tick();
}
return 0;
}
```
## 函数api解析
1. 初始化软件定时器
``` C
void softTimer_setup(softTimer_t *target, int updateCount){
target->updateCount = updateCount; //写入更新时的节拍触发次数
list_add(&target->node, &softTimer_Head);
}
```
2. 注册回调函数
``` C
void softTimer_attach(softTimer_t *target, void(*func)()){
target->callBackFunction = func; //注册回调函数
}
```
3. 定时节拍函数
``` C
void softTimer_tick(){
softTimer_t *softTimer_ptr; //创建一个软件定时器的结构体指针
list_for_each_entry(softTimer_ptr, &softTimer_Head, node){ //正向遍历定时器链表, 依次更新计数值.
softTimer_ptr->count++;
if(softTimer_ptr->count == softTimer_ptr->updateCount){ //若触发更新数值, 则清零计数值并触发回调函数.
softTimer_ptr->count = 0;
softTimer_ptr->callBackFunction();
}
}
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
[嵌入式C语言专精]无拓展上限的软件定时器
共151个文件
sample:13个
cmake:8个
json:7个
需积分: 0 0 下载量 151 浏览量
2024-01-29
14:24:21
上传
评论
收藏 265KB ZIP 举报
温馨提示
使用链表数据结构, 实现了简单且高效的软件定时器模块, 可以通过极简的3行代码来配置一个高效的软件定时器, 代码量小, 执行速度快, 拓展性强, 适用于嵌入式系统, 也是C语言学习的优质参考工程,
资源推荐
资源详情
资源评论
收起资源包目录
[嵌入式C语言专精]无拓展上限的软件定时器 (151个子文件)
00e1b1c427136cb7b34db36e84a53bdf6e7b4e 69B
01f1980dfc19c7eb17413df4c69664e862e5b1 280B
0294564e7ddc7c9286ce4212f3bb3857c950b3 4KB
03d85ba5109749dd18b3abc395b241691b1935 60B
03dc08673c84b2d0b944a43e50dc5fe898ee92 51B
095c79e764d9146591a02bdfcbb8b3a8803577 1KB
0e094bbe4026e25c9f74cfe37046e1db7c74fe 123B
0f6ad7f55797693f873b9a92cf6baf4a42639e 91B
143e44c4f9b2076268bc78ebe1ba769d939100 44B
15189862fba83f47461122626e53163804bf75 275B
1b13b4597b862bd615adf7df40678898670593 6KB
2101136d730a38548afd3a4d2d6bc6e026b810 181B
2132ed5f5ecff153e6d76d3d39ad4f392d4182 18KB
2b148f5d0ed5c57553390c34521d32b19f8189 656B
3557be6287e2eef1dd56097738b606c3415363 634B
37ac27c34321e3a66bf1cdb921de45907f3dd0 301B
37fd585251fc73831da264e420485e30cc54e5 495B
3de6df59d7af66d67ca415ccaf6ecd663c67db 1KB
3e3782cb776bf232a6ca3104d25dd7c92ea8c5 6KB
3fe0c2f0534294aaecbf41e68e82a957ee166b 293B
419a9f4eff574c96690803d3cd49c5605f0862 284B
43c55ed0b699af51376859d95aefc4bb041a3e 1KB
44ab14773aad35ba153283991efa8faca8332b 234B
4e60041dae2dc93ea2d00915ff8df145bdcc5e 332B
566b81b018ad684f3a35fee301741b2734c8f4 141B
57f5c607b8fdef51765a7529ee49397e5b25e5 2KB
5ff5fa0186725db5de85949ce0b590fddbd85c 112B
6150e1c183e94162dc0c711afc55781abbb0ec 244B
67af9c39f7b7a29e77e875a97aa69603d1b72c 120B
6ce5115c736b71dcd3d9b0988eb67213fc0f13 113B
6ef079c5a04c3a147b9802416ee40a1770f2c3 333B
6f843f7933a03f117a929c081ae58201040b2c 438B
74442b7d4b372cb013aa83dec7d1a3970daf1a 92B
750edc07d6415dcc07ae0351e9397b0222b7ba 17B
7ca8b7d0ed9d09883e56f90faf1097037541b8 76B
805885fc1bdeec4a92545a38e7e120c79b39f0 851B
8604bb65b25149b195f9e9f282f9683a428592 104B
89997a9f938597e328ba25bf52ef654899fca6 431B
8a52d9d3375704d5e11ef84422a4664016bccc 618B
91b5c423119121cac2a3a39291ce4fe7966337 550B
96dbd9a3efbf0ca8864f3bd84515db1ae01962 46B
9d8f4a1ca34031e914b4dacbca971c47d926c1 366B
9dc74f48190611094be92ae37d081d83beb533 50B
9de29bb2d1d6434b8b29ae775ad8c2e48c5391 15B
objects.a 9KB
a25f7f4cb416c083d265558da75d457237d671 155B
a4195e7f2a39b5c9b806cd3f469baf35587ae0 228B
a538e5ced6116552ddfecbe1ed0f1b982f085c 415B
a7560e8d73908327fa5830c55ee92d65aa5887 351B
a86440482323eab58dfbae1ec30239d37cdf07 2KB
b3c94830bab93d40d0770f2765540fe24ed423 131B
b9ec008fe40af25ad50664fb27cdcf30de3c60 57B
bcd156b4ffb5c2b5203332f8966e7c44c03e34 18KB
CMakeDetermineCompilerABI_C.bin 41KB
CMakeCCompilerId.c 27KB
softTimer.c 906B
main.c 755B
c5ac81c0e19f7614b650015c567be020e70dc8 153B
c646a4eef1b3c909445deaaf12818769275bed 200B
c6cf92b1a613cdb4ff0903e8a23de972758c66 2KB
cache-v2 0B
SoftTimer.cbp 6KB
ccd731726d7faa8b29d8d7dba3b981a53ca497 91B
cefc6b93bc1960147e93dddeb128c8a189e622 554B
cmake.check_cache 86B
Makefile.cmake 3KB
CMakeCCompiler.cmake 3KB
cmake_install.cmake 2KB
DependInfo.cmake 698B
CMakeDirectoryInformation.cmake 672B
cmake_clean.cmake 451B
CMakeSystem.cmake 395B
CMakeRCCompiler.cmake 259B
cmakeFiles-v1 0B
codemodel-v2 0B
COMMIT_EDITMSG 4KB
config 242B
main.c.obj.d 687B
softTimer.c.obj.d 529B
d0f66d1eff96f7275487835c78d4d7c38a5772 131B
d353a3829e2e4aab0f89737d3e8d263291411a 87B
deade366d7d6525a55da772a9e60913d4b7005 161B
description 73B
df4a2c559228f9b39ffbbb0f4cb0dc3187bf4d 24KB
dff9b26e96b4e86240364c85fa5d603be9d083 429B
e12d52bf50f91fbb6417b161ccfcd64c0ff2d9 4KB
e67776a94630de7b78f64fee900532bc004633 188B
ebe3ba507650abe1f26f8583555cfd41120d02 166B
ed3da42767674defb9975a6a5a2d7be05e7416 198B
exclude 240B
SoftTimer.exe 58KB
a.exe 41KB
f0dfcce9a3757e69256398121504a03908d155 422B
f375da9a6af8563df8d9be59d2f9b2ecdb561d 711B
f5960ee8e3a22119b2015333422a0dbe90724d 91B
f6f39cfed87400229763578eb2069eda236984 2KB
f98bdd709afbb28caa6d75389cf5339bff745a 6KB
fbe9c9ed952bd248f9f149a98df8602d68e410 197B
List_Entry.h 6KB
softTimer.h 614B
共 151 条
- 1
- 2
资源评论
NinoC137
- 粉丝: 122
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功