完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
需要移植一个裸奔AD程序到RTX上,结果发现延迟总是出问题,,于是仅创建了一个任务进行测试~
发现延迟完全超出预计了~~ 我是在STM32f103上实现的,看了RTX的手册仍然没找到问题出在哪~ 恳请大神给小弟指点指点!! RTX配置文件设置: timer clock value[Hz]: 72000000 Timer tick value [us]: 1000 这样每个时钟节拍应该是1ms,那么os_dly_wait(16)不是应该延迟16ms吗?,,, 最初发现时间不对,以为是调试窗口显示有问题,使用LED灯进行测试,设置延迟500ms, 结果等了半天才闪一次~~然后就知道真的出问题了~~ 可是测试结果是这样的~ 延迟前后时间对比: 任务运行视图: |
|
相关推荐
9个回答
|
|
时间多了10倍,你看下时钟具体多少?另外有几个线程?
|
|
|
|
是的,多了10倍,,时钟我在上面给了啊?不是这个时钟设置吗? 72MHz, 滴答设置为1ms, 就开了一个任务进行测试,, |
|
|
|
|
|
|
|
7762642422d 发表于 2018-10-30 17:09 好的,谢谢! 不过出问题后我就找了类似的资料修改了~ 并没有用,,, 刚刚重新编译了一遍(rebulid),延迟突然就正确了,,还是没明白是哪的问题~ 还有,再请教你一个问题:我在RTX的新开了一个任务,调用了HAL_TIM_Base_Start_IT(&htim1);启用stm32的定时器TIM1,结果程序就不稳定了,,,是不是不能直接在任务中使用HAL_TIM_Base_Start_IT(&htim1)? |
|
|
|
60user113 发表于 2018-10-30 17:18 少许误差还是正常的,但具体到HAL_TIM_Base_Start_IT我就不清楚了。 |
|
|
|
好的,我自己再研究研究吧~ 多谢了 |
|
|
|
楼主,如果在不开TIM1的情况下,延时正确,说明tim1的中断处理延时太长,看一下这个中断中处理是否增加了延时,导致滴答时钟中断被打断时间太长导致。
|
|
|
|
TOPCB 发表于 2018-10-30 17:56 听了你的建议,在调试窗口设置断点查看了一遍:时钟配置: 1、RTX滴答中断设置为1ms 2、TIM1设置为向上溢出中断,时间间隔为1ms以下为测试结果: 3、中断程序执行时间0.0046us 4、两次进入中断的时间间隔大致为1ms 从上面的数据上我看不出问题来,, 中断程序的执行时间在滴答中断周期之内,, 从裸奔程序移植到RTX后出问题的一直都是AD模块,,,在裸奔情况下延迟时间放大几倍都能正常运行~~ 在RTX中却不管延迟时间长短频频出错(一会儿对一会错), AD模块通过ADS1248芯片实现,芯片的校准及获取AD数据等待RDRY为低电平的方式实现; 裸奔情况下采用嵌套for循环(总共循环500次),AD实现正常,其后测试将延迟修改为1ms,2ms,3ms等, 均运行正常;在RTX中为了将等待时间用于其它任务使用,延迟采用os_dly_wait(1)的方式实现。(1ms) 刚刚将先前运行正常的裸机AD程序与RTX项目中的配置进行比较: 两者的区别在于: 裸机时使用的时钟源是HSI,而现在使用8M外部高速晶振HSE,这造成了时钟配置发生了改变 SYSCLK, HCLK,AHB,Cortex System timer,FCLK,APB1外设时钟,APB1计时器时钟,APB2外设时钟,APB2计时器时钟 裸机时:APB1外设时钟及APB2外设时钟为18MHz,其余均为36MHz RTX中:APB1外设时钟及APB2外设时钟为36MHz,其余均为72MHz(即增大了一倍) 于是在裸机程序中对时钟配置进行了修改,发现修改后AD数据也不对了~~ 经过逐一排查,发现问题出自于APB1的时钟配置上,在RTX中将APB1的时钟配置缩小一倍后再次进行调试,这回没问题了, 然而程序中使用到APB1时钟的当前只有SPI2,,,这下又来了个新问题~ SPI时钟为什么会对AD数值产生影响呢? 是因为ADS1248上的串口时钟与其不匹配?可是串口时钟接的是GPIO引脚,时钟为APB2时钟,此时双方频率都增大了一倍了啊~ 而SPI2的预分配我已经设置为最大了~,只能通过修改APB1的时钟频率进行修改,,, 看来得重新研究研究文档了~~~ |
|
|
|
楼上moyanming2013说的RTX_CONFIG.C这个文件,也遇到过,用的文件和MDK的版本不对,造成延时相差非常大,改成对应MDK下的RTX_CONFIG.C就可以了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
hal库中i2c卡死在HAL_I2C_Master_Transmit
981 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1464 浏览 1 评论
524 浏览 0 评论
1057 浏览 0 评论
1199 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 01:48 , Processed in 0.830630 second(s), Total 85, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号