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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我在rt_hw_board_init函数里面对外设还有我的板子上的一些模块进行初始化,有些模块需要进行微秒延时或者毫秒延时,但是我配置了定时器以后发现延时函数进不了中断,后来发现是系统启动前关闭了总中断导致的,如下:
6 Z. |& Y% S# a/ D' F
% h$ r+ V* Y  W3 l% Yint rtthread_startup(void)  @0 u% P- Q/ V# w; X
{
) n/ u1 s+ q9 A: R" ]rt_hw_interrupt_disable();//关闭了总中断导致无后面的定时器无法进入中断服务程序. p) u7 _2 o9 [, _' C
/* board level initialization
2 k, a4 ?$ r+ d3 `" O3 z, r3 J6 {1 ?( X( S8 B8 |, X
NOTE: please initialize heap inside board initialization.
# I3 O/ b- x, f9 |8 ~  k/
: ]8 @0 |1 U1 m9 l. Wrt_hw_board_init();$ s8 k; }3 S/ v; y  r. h1 x) {* y
/ show RT-Thread version */
, f! t4 Z. o9 p* Krt_show_version();9 L/ g+ v: _( V
...
/ o; e, M8 V7 ~3 k所以问题来了,如果我想在系统启动前调用延时函数怎么处理呢?改成不用中断的延时函数?还是说把模块的初始化放到系统启动以后去进行?3 x6 R9 j% a7 B9 C# u- F

该用户从未签到

2#
发表于 2022-9-19 17:47 | 只看该作者
你查询的定时器,st 里因为有专门的 systick ,也是一个简化的定时器。rt_hw_thread_udelay 这个函数就是不停的比较 systick 值。* j' T  a. V4 ^, c: X
我修改的 HAL_uDelay 也借用了 rt_hw_thread_udelay 。
+ b$ D& W; z# D* Y' r两种延时,一种是纯延时,啥也不干;还有一种是等待某种状态,超时返回错误。我提到的是第二种。
" i+ a; I/ g$ [- K你好像实现的是第一种,第一种情况使用 rt_hw_thread_udelay 就好了。你的平台环境没有这个函数实现?
, U9 r: p  r" c* u+ I1 V. [% e1 W

该用户从未签到

3#
发表于 2022-9-19 18:03 | 只看该作者
不需要纠结开中断
' ^# _0 a: j- X, O9 [! @( F- T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-8 14:32 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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