觉得自己绕了弯子

今天,终于没有耐心继续看《Effective STL》了。因为觉得自己是绕了弯子。我的目标是熟悉驱动开发和嵌入式开发。看STL的书,没有什么大的帮助,而且这本书本身也是针对已经在使用STL的人的。对我这个仅仅知道STL是何物的人,是不适合的。同样的,《Linux内核源码情景分析》也是这种情况。

我需要的是从头开始学习。决定,从明天开始看《Linux Device Driver》。

花了96天,看完了800页的《C++大学教程》这个大部头,对我以后的学习信心是个增强。之后的《Effective STL》和,《Linux内核源码情景分析》,都是看了没有几页就放弃了,还得回头来看最基础的概念。对于这两本书的错误选择,是走了一点弯路。还好只是浪费了一个月的时间。

从明天开始!

我制作了一个,寻迹小车,为什么一旦加入下面这一段程序,小车就动不了,删去了就没事儿。void TIM1_UP_IRQHandler(void) { /*定义静态变量(默认初值为0,函数退出后保留值和存储空间)*/ static uint16_t Count; //用于计次分频 if (TIM_GetITStatus(TIM1, TIM_IT_Update) == SET) { /*每隔1ms,程序执行到这里一次*/ Key_Tick(); //调用按键的Tick函数 /*计次分频*/ Count ++; //计次自增 if (Count >= 40) //如果计次40次,则if成立,即if每隔40ms进一次 { Count = 0; //计次清零,便于下次计次 /*获取实际位置值*/ /*Encoder_Get函数,可以获取两次读取编码器的计次值增量*/ /*计次值增量进行累加,即可得到计次值本身(即实际位置)*/ /*这里先获取增量,再进行累加,实际上是了个弯子*/ /*如果只需要得到编码器的位置,而不需要得到速度*/ /*则Encode_Get函数内部的代码可以修改为return TIM_GetCounter(TIM3);直接返回CNT计数器的值*/ /*修改后,此处代码改为Actual = Encoder_Get();直接得到位置,就不再需要累加了,这样更直接*/ Actual += Encoder1_Get(); /*获取本次误差、上次误差和上上次误差*/ Error2 = Error1; //获取上上次误差 Error1 = Error0; //获取上次误差 Error0 = Target - Actual; //获取本次误差,目标值减实际值,即为误差值 /*PID计算*/ /*使用增量式PID公式,计算得到输出值*/ Out += Kp * (Error0 - Error1) + Ki * Error0 + Kd * (Error0 - 2 * Error1 + Error2); /*输出限幅*/ if (Out > 100) {Out = 100;} //限制输出值最大为100 if (Out < -100) {Out = -100;} //限制输出值最小为100 /*执行控制*/ /*输出值给到电机PWM*/ /*因为此函数的输入范围是-100~100,所以上面输出限幅,需要给Out值限定在-100~100*/ Motor_SetSpeed3(Out); } TIM_ClearITPendingBit(TIM1, TIM_IT_Update); } }
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值