Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
定时器
发布于 2019-11-03 11:01:08 浏览:1190
订阅该版
* 本帖最后由 ZBXY_7941 于 2019-11-3 11:03 编辑 * **HARD_TIMER 模式** 在中断上下文环境中执行时,例如在中断上下文中执行的超时函数它不应该试图去申请动态内存、释放动态内存等。RT-Thread 定时器默认的方式是 HARD_TIMER 模式,即定时器超时后,超时函数是在系统时钟中断的上下文环境中运行的。**SOFT_TIMER 模式** SOFT_TIMER 模式可配置,通过宏定义 RT_USING_TIMER_SOFT 来决定是否启用该模式。该模式被启用后,系统会在初始化时创建一个 timer 线程,然后 SOFT_TIMER 模式的定时器超时函数在都会在 timer 线程的上下文环境中执行。 根据这个程序我并没有看出定时器1的超时函数在线程中或者定时器2的超时函数在中断中,所以对于这两种定时模式我还是有所模糊,本人小白想请教一下大家。所谓的在中断上下文中运行和在线程的上下文中运行具体是什么?```
#include
```
查看更多
7
个回答
默认排序
按发布时间排序
ZBXY_7941
2019-11-03
这家伙很懒,什么也没写!
[i=s] 本帖最后由 ZBXY_7941 于 2019-11-3 11:10 编辑 [/i] ``` #include
/* 定时器的控制块 */ static rt_timer_t timer1; static rt_timer_t timer2; static int cnt = 0; int main(void) { return RT_EOK; } /* 定时器 1 超时函数 */ static void timeout1(void *parameter) { rt_kprintf("periodic timer is timeout %d\n", cnt); /* 运行第 10 次,停止周期定时器 */ if (cnt++>= 9) { rt_timer_stop(timer1); rt_kprintf("periodic timer was stopped! \n"); } } /* 定时器 2 超时函数 */ static void timeout2(void *parameter) { rt_kprintf("one shot timer is timeout\n"); } int timer_sample(void) { /* 创建定时器 1 周期定时器 */ timer1 = rt_timer_create("timer1", timeout1, RT_NULL, 10, RT_TIMER_FLAG_SOFT_TIMER|RT_TIMER_FLAG_PERIODIC);//SOFT_TIMER模式 /* 启动定时器 1 */ if (timer1 != RT_NULL) rt_timer_start(timer1); /* 创建定时器 2 单次定时器 */ timer2 = rt_timer_create("timer2", timeout2, RT_NULL, 30, RT_TIMER_FLAG_HARD_TIMER|RT_TIMER_FLAG_ONE_SHOT); //HARD_TIMER模式 /* 启动定时器 2 */ if (timer2 != RT_NULL) rt_timer_start(timer2); return 0; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(timer_sample, timer sample); ```
还没想好
2019-11-04
这家伙很懒,什么也没写!
中断上下文指: 定时器超时回调函数在中断中运行 线程上下文指: 定时器超时回调函数在线程中运行 中断:一般为系统心跳定时器中断 线程:timer 软定时器线程
ZBXY_7941
2019-11-04
这家伙很懒,什么也没写!
这个定义说的能理解,但您看一下上面那个例程,我初始化了两个定时器,一个是软件定时器,一个是硬件模式,但他们共用一个超时函数。功能是可以实现的,但我并不能判断两种模式的定时器共用的同一个超时函数是在中断环境下还是在线程环境下运行的?
ZBXY_7941
2019-11-04
这家伙很懒,什么也没写!
还,麻烦您能说具体点吗?刚接触RTT一周。那上面那个程序的超时函数应该是处于什么样的上下文中进行执行的?所谓的线程中运行是还需要创建一个线程,将超时函数在线程中调用吗?还有就是所谓的中断中运行是说将超时函数在中断中调用吗?
ZBXY_7941
2019-11-05
这家伙很懒,什么也没写!
打开了,但没感觉有啥不一样的,最上面的那个例程在不打开软定时器的时候,就能正常执行,现在打开依旧可以正常执行。还是没有懂在中断环境和在线程环境的真正含义,您方便写个例程让我看看吗?
撰写答案
登录
注册新账号
关注者
0
被浏览
1.2k
关于作者
ZBXY_7941
这家伙很懒,什么也没写!
提问
6
回答
35
被采纳
4
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt thrad 源码笔记 :rt thread中的面向对象
2
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
3
简单两步配置RTT源码阅读环境 vsc+clangd插件
4
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
5
LVGL使用字库IC芯片显示中文
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
用RTT跑流水灯
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部