Version:
BK1(20200211) :最初版本
背景:
以前学嵌入式/stm32时总是面向过程解决某一特定的问题。总是能够用简单的代码通过单线程解决问题。但是随着项目越来越综合,传感器的数量越来越多,各种调试和通信功能也需要同步进行,因此对抢占式内核的需求愈发迫切。虽然已有开源的RTOS和RTT嵌入式系统可供选择,但本着学多门技术的原则。从此踏上了数个月的OS开发不归路。在这过程中,遇到十分多的hardfault错误。在debug的过程中,我才发现MDK很厉害。但网上太多资料都没有对其功能作很详细的讲解,导致我走了很多弯路。因而写一篇文章来记录和分享一些debug技巧。重点是hardfault的debug。
首先一点,如果百度搜不到答案,请转战google或者bing。翻不了墙的选择后者。因为诸如MDK的使用资料官方有,而且很详细,但是你有百度的话大概率是搜不到这些资料的。对于代码中的大部分语法问题都可以通过探针等方法自查查出,此处重点将代码引发的hardfault问题。推荐大家用bing搜索“MRK Using Cortex-M3_M4_M7 Fault Exceptions”下载KEIL这个pdf文件仔细看,里面很多的debug技巧是你从百度和论坛以及群中学不到的。所以有句话说,东西还是原装的好。
1. 使用MDK Hardfault Report和手册定位硬件错误原因
STM32隶属CM3内核,实际上整个CM3/4/7都有一个很完备的hardfault信息反馈机制。通过MDK的debug窗口可以查看。