Очередная пачка глупых вопросов про С++ (потом сотрёте)
- Войдите на сайт для отправки комментариев
Вс, 11/09/2022 - 12:49
Конечно, хотелось бы услышать Евгения и Дракулу.
Речь будет только о 32х битной платформе, вслучечо...
Вопрос номер раз: как обратиться, допустим, по адресу 0x1fffe000 и не схватить Hard Fault.
Вопрос номер раз: как обратиться, допустим, по адресу 0x1fffe000 и не схватить Hard Fault.
Обернуть в исключение
Что значит "обратиться по адресу"?
В С++ нет понятия "Hard Fault"
Что значит "обратиться по адресу"?
В С++ нет понятия "Hard Fault"
И при чем тут Си? Контроллер сам впадает в эту ошибку, если что-то пошло не так (аппаратно). Вы читаете значение по адресу, которого реально не существует и идете нахер в Hard Fault. Что Си, что хуеси... программа уже во флеш и не имеет значения на чем она написана.
Я конечно не спец по си, но например в Linux при кривизна кода прога просто зависает, в stm32 никаких hard fault тоже не видел, тупо зависание, внешних отладчиков не подключено, видимо поэтому широко разрекламированных hard fault не видел.
Что значит "обратиться по адресу"?
В С++ нет понятия "Hard Fault"
Есть такое понятие: "аппаратно". А потому от языка программирования не зависит. Совсем.
#define CRC_ADDR (FLASH_END - 3) #define CRC_CALC_SIZE ((2 * 1024 * 1024) - 4) #define CRC_UNTOUCHED (uint32_t)(0xFFFFFFFF) bool CheckFlashIntergrity(void) { uint8_t *crc_addr = (uint8_t*)(uint32_t*)CRC_ADDR; uint32_t strd_crc = *(uint32_t*)crc_addr; if(strd_crc == CRC_UNTOUCHED) { return true; } uint8_t *start = (uint8_t*)(uint32_t*)FLASH_BASE; volatile uint32_t flash_size = (uint32_t)g_pfnVectors[7]; // access to value in g_pfnVectors which stores FW size volatile uint32_t clcd_crc = _calcCRC32(start, flash_size); return (strd_crc == clcd_crc); }Дык вот в том то и прикол, что на авр можно обращаться куда угодно и сколько угодно. На стм32 на эстм такой финт ушами никанает)))
Ну так RAS и CAS - тоже нет.
Но ты зачем-то приплел
avr 8 бит, стм 32 бита, т.е четыре по восемь. Если соблюдать кратность четырем, то ничего плохого не произойдет.
Ну так RAS и CAS - тоже нет.
Но ты зачем-то приплел
Кто-то прочитал вопрос, в отличие от половины этой темы.
На AVR платформе можно читать и писать куда угодно и ничего криминального не будет. А на STM32 больно-то не разгонишься, всё строго по правилам кристалла. Посему не нужно сравнивать AVR c STM !!!