新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2020-5-13
- 在线时间
- 21 小时
|
最近用stm32f7这款芯片做了个项目,项目对速度的要求很高,用了很多DMA,然后就是各种踩坑。坑1:移植UCOS时,需要关掉Lazy Stackin功能,这个可以简单的理解成FPU的硬件出入栈开关,关掉这个功能后,进中断时不能对FPU寄存器进行现场保护,这意味着,你不能在中断中计算浮点数,否则会影响到主程序中的浮点变量。造成1.1+1.1不等于2.2的问题。。。
坑2:Cache功能,这个功能是最搞人的。我的项目中用了很多DMA,这个功能会影响内核读取数据DMA,找这个问题找了我半个月。我的项目中还用了F7的LTDC功能,LTDC用又了DMA2D功能,现在屏幕时不时闪一下(重影),关了Cache就不闪了,我严重怀疑还是Cache影响了我屏幕的显存数据,但是又找不到解决办法(感觉项目要凉了)。
坑3:HALL库,传说HALL库让调驱动更简单了,但我觉得反而增加了程序的调试难度。比方说串口接收的回调,我使用115200波特率,从中断到应用层的回调函数,不知经过多少层的调用才能来到回调函数,然后我还要再回调中做一些保存串口数据的操作,完犊子,第一个数据没存完,第二个数据发过来了,一个串口接收让我的CPU满负载了,这不是笑话吗。最后我还是用直接操作寄存器的方法来做的。
|
|