HardFault при дебаге прошивки для stm32 в CubeIde на С++

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
erlbriton
Родился
Сообщения: 4
Зарегистрирован: Сб ноя 04, 2023 07:49:00

HardFault при дебаге прошивки для stm32 в CubeIde на С++

Сообщение erlbriton »

Приветствую котоединомышленников!

При запуске дебага простой прошивки (просто для проверки) на С++ для stm32f405, stm32F103 в CubeIde вываливаюсь в HardFault при достижении обращения программы к виртуальному методу:

Код: Выделить всё

#ifndef TEST103_HPP_
#define TEST103_HPP_
#include "gpio.h"
#include "main.h"
 
class PtrFoo {
public:
    virtual void fooVirt(){};
};
class FooSecond: public PtrFoo {
public:
    void fooVirt() override {
        int a = 2 + 3;
    }
};
 
class FooTherd: public PtrFoo {
public:
    void fooVirt() override {
        int b = 5 + 4;
    }
};
 
class PtrFoo;
 
class ComCom {
public:
    PtrFoo* arrPtrFoo[2] ;
    ComCom(){
    FooSecond FS;
    FooTherd FT;
    arrPtrFoo[0] = &FS;
    arrPtrFoo[1] = &FT;
    }
 
    void fooVirt(int y) {
        arrPtrFoo[y]->fooVirt();//На следующем шаге уходит в HardFault
    }
};
 
#endif /* TEST103_HPP_ */
В main.cpp перед while:

Код: Выделить всё

ComCom comCom;
comCom. fooVirt(0);
Долгое время пытался найти решение проблемы в сети, но безрезультатно. Тот же эффект наблюдается при работе в IARe. Давно пишу на С для stm32, на С++ перешел совсем недавно.
При отладке в Visual Studio все работает корректно. Куда копать? Спасибо.
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: HardFault при дебаге прошивки для stm32 в CubeIde на С++

Сообщение Reflector »

FS и FT локальные, при выходе из конструктора они уничтожаются.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: HardFault при дебаге прошивки для stm32 в CubeIde на С++

Сообщение VladislavS »

Объекты FS и FT после выполнения конструктора перестают существовать. Получаете массив указателей arrPtrFoo в никуда.

В комплекте с оптимизиатором, который выкидывает почти весь это код как ничего не делающий, дело даже до вызова не доходит, падает на попытке прочитать адрес метода. При выполнении зелёной строки будет HF. Обратите внимение, что от конструктора осталась одна команда BKPT, остальное почикалось.
СпойлерИзображение
321.png
(67.84 КБ) 128 скачиваний
Добавлено after 30 minutes 9 seconds:
PS: Прикольно, с включенной оптимизацией GCC этот код выкидывает как ничего не делающий и ошибка маскируется. Без оптимизации падает, как и положено. Ссылка на godbolt.
erlbriton
Родился
Сообщения: 4
Зарегистрирован: Сб ноя 04, 2023 07:49:00

Re: HardFault при дебаге прошивки для stm32 в CubeIde на С++

Сообщение erlbriton »

Всем спасибо. Вопрос решен.
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»