c - ASF4 Microchip API 定时器驱动复位功能
问题描述
我将 ASF4 API hal_timer 用于 ARM Cortex M4。我正在使用计时器驱动程序来计时数据序列。为什么不存在复位功能?我在 TIMER_TASK_ONE_SHOT 模式下使用计时器,并希望在需要时重置它。
我以为一个简单的
timer_start(&TIMER_0);
timer_stop(&TIMER_0);
可以解决问题,但似乎不起作用。
每次计时事件是否需要重新初始化计时器?
我可能遗漏了一些明显的东西。我是否错误地解决了这个问题,原因是为什么方法 timer_reset() 不存在?
解决方案
假设您使用的是 ASF4 参考手册中的(已编辑)示例:
/* TIMER_0 example */
static struct timer_task TIMER_0_task;
static void TIMER_0_task_cb(const struct timer_task *const timer_task)
{
// task you want to delay using non-existent reset function.
}
void TIMER_0_example(void)
{
TIMER_0_task.interval = 100;
TIMER_0_task.cb = TIMER_0_task_cb;
TIMER_0_task.mode = TIMER_TASK_ONE_SHOT;
timer_add_task(&TIMER_0, &TIMER_0_task);
timer_start(&TIMER_0);
}
除了 API 不支持的重置,您可以使用:
timer_remove_task(&TIMER_0, &TIMER_0_task);
timer_add_task(&TIMER_0, &TIMER_0_task);
这将有效地重新启动与TIMER_0_task
.
在底层,定时器任务被维护为一个有序列表,按照每个任务何时到期的顺序,并使用 API 提供的函数来维护列表顺序。
推荐阅读
- linux - 在 bash 脚本中添加请求的参数作为变量
- python - 安装 Jupyter Notebooks - Python 3.9 - Windows 10 的问题
- vba - 如何恢复 VBA Visual Basic 密码
- javascript - 如何使用 chrome.cookies.set() 在 Chrome 扩展程序中设置一组以前保存的 cookie?
- angular - 对象Angular中的if语句
- excel - 从 MATLAB 将图形/图像插入 Excel
- arrays - 将彩色框分组为正方形的算法
- c# - 它是一个变量,但它的使用方式类似于 C# 编译器错误
- javascript - 如何在搜索Javascript中获得前5个结果
- c - C 中的内存访问冲突:尝试将子字符串从 char** 写入 char**