硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3200|回复: 3
收起左侧

[有问必答] 基础例程第10章 V5-003b_SysTick实验_复杂例子 中的疑问

[复制链接]

6

主题

60

回帖

78

积分

初级会员

积分
78
发表于 2018-10-10 15:14:01 | 显示全部楼层 |阅读模式
第10章的第二个例程(V5-003b_SysTick实验_复杂例子),有几个疑问,请各位指教:
1.bsp_DelayUS()函数中,不断读取SysTick->VAL的值,
        tnow = SysTick->VAL;
这个值是硬件自动修改而且递减的对吧?既然如此,那么
            /* SYSTICK是一个递减的计数器 */
            if (tnow < told)
            {
                tcnt += told - tnow;
            }
            /* 重新装载递减 */
            else
            {
                tcnt += reload - tnow + told;
            }
            told = tnow;

这里的else中的语句会被执行吗?“重新装载递减”是什么意思?

2.例程中在配置systick中断时,还开启了一个硬件定时器中断(bsp_InitTimer函数最后一行),这个硬件中断在这里起什么作用?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-10-10 15:53:28 | 显示全部楼层
1、SysTick->VAL是递减计数,这里是表示递减到0时的处理。
2、这个跟Systick无关,是单次计数器,后面你学习Modbus的时候会用到。

ps:这里的us延迟的做的不够好,后期推出了新的方案,看FreeRTOS的DS18B20例子里面的bsp_dwt.C文件
https://forum.anfulai.cn/forum.p ... &extra=page%3D1
回复

使用道具 举报

6

主题

60

回帖

78

积分

初级会员

积分
78
 楼主| 发表于 2018-10-10 16:44:17 | 显示全部楼层
eric2013 发表于 2018-10-10 15:53
1、SysTick->VAL是递减计数,这里是表示递减到0时的处理。
2、这个跟Systick无关,是单次计数器,后面你学 ...

嗯。FreeRTOS的例程在4.22G的资料里面有。
还有点不解:
1.SysTick->VAL刚刚递减为0时,if语句应该仍是成立的(因为tnow为0,而told又比0大);
要执行else里面的语句,必须是
        首先tnow != told  ,并且不可以  tnow < told;
这样只能是tnow > told,也就是说,SysTick->VAL递减为0之后,又从最大(FFFFFFFF)开始递减,是这样吗?但是这样的话 “reload - tnow + told”的结果应该是一个负数了,reload又是起什么作用呢?

2.这个单次计数器在这里起什么作用呢?执行回调函数吗?可是应该要先调用bsp_StartHardTimer()(实际上好像没有被调用)吧,否则回调函数里面的内容是什么呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-10-10 17:40:12 | 显示全部楼层
红烧鱼头 发表于 2018-10-10 16:44
嗯。FreeRTOS的例程在4.22G的资料里面有。
还有点不解:
1.SysTick->VAL刚刚递减为0时,if语句应该仍是 ...

1、你的理解还不到位。

reload是什么呢,它是你初始化时设置的SysTick->LOAD,具体学习函数SysTick_Config源码。

递减到0后,SysTick->VAL会被重新赋值为SysTick->LOAD,也就是tnow 的最大值就是reload,捋捋。

2、看此贴学习https://forum.anfulai.cn/forum.p ... &highlight=TIM2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 16:51 , Processed in 0.038705 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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