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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我在rt_hw_board_init函数里面对外设还有我的板子上的一些模块进行初始化,有些模块需要进行微秒延时或者毫秒延时,但是我配置了定时器以后发现延时函数进不了中断,后来发现是系统启动前关闭了总中断导致的,如下:  ]: n" n0 ~7 z
* \$ R# t" \7 X) e& b7 N  O/ Y
int rtthread_startup(void)4 j5 }1 m% u" W7 j* L( w) d  C  F
{; B" D% z# e/ k& o
rt_hw_interrupt_disable();//关闭了总中断导致无后面的定时器无法进入中断服务程序8 y/ H+ T7 N' D9 b3 i3 R
/* board level initialization2 z( |* O$ C$ h" Q1 w0 T' s
  F3 a) k/ L7 ?; E, B- x0 n
NOTE: please initialize heap inside board initialization.- W! j: Q8 [' r1 A
/( I" Z5 M, t- B0 u
rt_hw_board_init();- f' G. Y; }$ w2 N* L
/ show RT-Thread version */
# m/ m6 J; S+ j! r: v  _rt_show_version();
# D* F# e4 N1 }...
# }$ V2 u$ I; O9 T5 o+ n; A8 d, }所以问题来了,如果我想在系统启动前调用延时函数怎么处理呢?改成不用中断的延时函数?还是说把模块的初始化放到系统启动以后去进行?
* s2 x  m2 u% X8 M" z; C" N

该用户从未签到

2#
发表于 2022-9-19 17:47 | 只看该作者
你查询的定时器,st 里因为有专门的 systick ,也是一个简化的定时器。rt_hw_thread_udelay 这个函数就是不停的比较 systick 值。
% H* Z* `( s6 C7 A3 p5 J+ @: v- q我修改的 HAL_uDelay 也借用了 rt_hw_thread_udelay 。
) K- |! ]% h: Q( I/ \( k4 S两种延时,一种是纯延时,啥也不干;还有一种是等待某种状态,超时返回错误。我提到的是第二种。2 _, ~" K. {: O( m) F& h
你好像实现的是第一种,第一种情况使用 rt_hw_thread_udelay 就好了。你的平台环境没有这个函数实现?. [; Z' g  I% B3 s5 j

该用户从未签到

3#
发表于 2022-9-19 18:03 | 只看该作者
不需要纠结开中断
2 M7 ?' I; c& C2 X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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