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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我在rt_hw_board_init函数里面对外设还有我的板子上的一些模块进行初始化,有些模块需要进行微秒延时或者毫秒延时,但是我配置了定时器以后发现延时函数进不了中断,后来发现是系统启动前关闭了总中断导致的,如下:
* i8 M" x9 O8 Q* J& y" N4 y- }% T( N( O
int rtthread_startup(void)- L5 I* x4 p1 j. p. k. ?
{
, ]" M3 \( }& _/ jrt_hw_interrupt_disable();//关闭了总中断导致无后面的定时器无法进入中断服务程序. Z3 {; j; X7 Y( C9 H* y
/* board level initialization! K) t: E) Q5 V
; P7 o( f2 R5 x4 ^6 R3 h( D0 [
NOTE: please initialize heap inside board initialization.
5 C& k, B9 v; a  c1 j/. A' B" ?$ [9 r. h
rt_hw_board_init();
( X/ U3 D  |6 s! D( T1 ~/ show RT-Thread version */
$ m( L: T: ^) ~/ Prt_show_version();; b/ _, p; e+ `
...
* @' |5 M. c+ O所以问题来了,如果我想在系统启动前调用延时函数怎么处理呢?改成不用中断的延时函数?还是说把模块的初始化放到系统启动以后去进行?! p: I1 q& L- c3 c6 y7 f

该用户从未签到

2#
发表于 2022-9-19 17:47 | 只看该作者
你查询的定时器,st 里因为有专门的 systick ,也是一个简化的定时器。rt_hw_thread_udelay 这个函数就是不停的比较 systick 值。
* U# Q' R: c. \# x; S% L$ P8 K! A我修改的 HAL_uDelay 也借用了 rt_hw_thread_udelay 。
- [9 D" n2 Q- M" h两种延时,一种是纯延时,啥也不干;还有一种是等待某种状态,超时返回错误。我提到的是第二种。
) D/ ?0 k# a2 n' \( o5 @你好像实现的是第一种,第一种情况使用 rt_hw_thread_udelay 就好了。你的平台环境没有这个函数实现?
# e  n  j8 W) j1 `

该用户从未签到

3#
发表于 2022-9-19 18:03 | 只看该作者
不需要纠结开中断
" `5 Z7 }) K; m6 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 18:41 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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