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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我在rt_hw_board_init函数里面对外设还有我的板子上的一些模块进行初始化,有些模块需要进行微秒延时或者毫秒延时,但是我配置了定时器以后发现延时函数进不了中断,后来发现是系统启动前关闭了总中断导致的,如下:4 ]# Y8 G6 `( Z& R7 y1 z
2 b* S! B; u) O5 e7 w6 C- L9 ^. w
int rtthread_startup(void)
: x' ~9 J) L7 h4 u4 O, @! H* ]' E{
7 w# _" u# T: h) Crt_hw_interrupt_disable();//关闭了总中断导致无后面的定时器无法进入中断服务程序/ r" c" K4 @, g2 z
/* board level initialization7 M8 q7 I, O6 K: J5 X

3 a0 c+ R3 l( J/ O* B2 W$ NNOTE: please initialize heap inside board initialization.
% _. H; g# P% w0 S" B; i/! ]3 Y4 P) N- ~, ~' \, @$ ], g
rt_hw_board_init();1 }; V- C1 u; E5 J5 w+ f
/ show RT-Thread version */, s4 j1 e# S( M9 r& d* A
rt_show_version();
& b9 ^8 V6 Y  q6 U...* L( M- A2 t0 C. ~4 V
所以问题来了,如果我想在系统启动前调用延时函数怎么处理呢?改成不用中断的延时函数?还是说把模块的初始化放到系统启动以后去进行?
" ?) h3 B6 s1 W3 x1 l% v, O

该用户从未签到

2#
发表于 2022-9-19 17:47 | 只看该作者
你查询的定时器,st 里因为有专门的 systick ,也是一个简化的定时器。rt_hw_thread_udelay 这个函数就是不停的比较 systick 值。  s) K# `# G2 f. y$ m+ F0 X
我修改的 HAL_uDelay 也借用了 rt_hw_thread_udelay 。
+ o; m$ `. W& Y; U4 F  V两种延时,一种是纯延时,啥也不干;还有一种是等待某种状态,超时返回错误。我提到的是第二种。1 L5 D& e9 f/ m6 h7 B2 ^
你好像实现的是第一种,第一种情况使用 rt_hw_thread_udelay 就好了。你的平台环境没有这个函数实现?$ F6 q5 r% x1 s+ |& {1 `% D8 C

该用户从未签到

3#
发表于 2022-9-19 18:03 | 只看该作者
不需要纠结开中断( b: |" _1 [) y+ Z5 g. `) H( ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 20:36 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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