找回密码
 注册
关于网站域名变更的通知
查看: 180|回复: 2
打印 上一主题 下一主题

想在RT-Thread系统启动前调用延时函数怎么处理呢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-19 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我在rt_hw_board_init函数里面对外设还有我的板子上的一些模块进行初始化,有些模块需要进行微秒延时或者毫秒延时,但是我配置了定时器以后发现延时函数进不了中断,后来发现是系统启动前关闭了总中断导致的,如下:
! e: T, y) l% [" v8 s1 g7 i
. Z4 e0 b9 x9 b; O" Pint rtthread_startup(void)
( c# k# M. S7 S{
/ c" w; l' ^7 E& O- t5 crt_hw_interrupt_disable();//关闭了总中断导致无后面的定时器无法进入中断服务程序
& [% M. ]9 l7 D; z/* board level initialization
3 [" L" V1 p4 u; t+ c' r7 D; p( D
NOTE: please initialize heap inside board initialization.
8 N( ^3 z  V1 I$ \/
+ E% e9 z% y1 }. _5 H! Q: _2 X5 d# c/ trt_hw_board_init();
+ N9 b6 ^$ B  P% J7 N/ E/ show RT-Thread version */
' f3 ?- B0 Q) X: w9 r/ ]+ Xrt_show_version();
% L' R1 J% f/ l2 D...
# d% [) D( `& l9 K所以问题来了,如果我想在系统启动前调用延时函数怎么处理呢?改成不用中断的延时函数?还是说把模块的初始化放到系统启动以后去进行?1 E% X" t5 H. @

该用户从未签到

2#
发表于 2022-9-19 17:47 | 只看该作者
你查询的定时器,st 里因为有专门的 systick ,也是一个简化的定时器。rt_hw_thread_udelay 这个函数就是不停的比较 systick 值。: N% T0 H7 h3 n( Z
我修改的 HAL_uDelay 也借用了 rt_hw_thread_udelay 。
8 P4 ^  q4 s/ Y* n, z两种延时,一种是纯延时,啥也不干;还有一种是等待某种状态,超时返回错误。我提到的是第二种。
! N3 @; v8 Z) Z* S; ~4 w5 W你好像实现的是第一种,第一种情况使用 rt_hw_thread_udelay 就好了。你的平台环境没有这个函数实现?
1 o3 k  d( F! V* |' X2 }

该用户从未签到

3#
发表于 2022-9-19 18:03 | 只看该作者
不需要纠结开中断
* C  X7 `( f. _9 C& ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 17:22 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表