1. hard fault вызывается всегда, если не включены обработчики bus fault, usage fault, mem fault. man по регистрам SCB. 2. если обработчики включены, а все равно hard fault - есть биты, определяющие признак hard fault в том же SCB. В частности, невозможность прочитать таблицу векторов. 3. Если и там нет информации - наиболее типичная причина - вызов svc, когда прерывания запрещены. 4. если ничего не помогло - смотрим lr на входе, по адресу возврата определяем, использовался ли msp или psp. Раскручиваем стек, находим вызывающий xPSR, PC, LR.
в принципе, все это умеет моя операционка, mkernel. Я сегодня буду делать коммит, как раз с этой частью кода. Пример можно взять там.
|