-
- У IAR ARM есть опция компиляции с проверкой указателей на выход из массива. - BlackMorda(18.03.2025 20:21)
- А откуда ХардФалаут знает где граница массива? - IBAH(18.03.2025 12:13)
- А он и не знает. Но если попытаться прочитать по неправильному
адресу (например, за пределами реального адресного пространства ОЗУ
или попасть в стек), запросто хардфолт выскочит. - Eddy_Em(18.03.2025 17:39)
- Это был наводящий вопрос. - IBAH(18.03.2025 18:03)
- вот уж не знаю, но несколько раз реально путал индексы и пытался записать за пределы. И с удивлением видел перезагрузку. Когда ставил останов там в обработчике - видел, что пытаюсь записать хрен знает в какое место. Но все это было в SRAM1. Здесь же (в SRAM2) тишина, никто не дергался. Вот, там ниже меня ткнули носом. Возможно всё дело в этом. Срабатывает когда несуществующий адрес. - Лaгyнoв(18.03.2025 16:18)
- А он и не знает. Но если попытаться прочитать по неправильному
адресу (например, за пределами реального адресного пространства ОЗУ
или попасть в стек), запросто хардфолт выскочит. - Eddy_Em(18.03.2025 17:39)
- Откуда вера в то, что HardFault должен непременно выручать при
порче памяти? Этого никто никогда не обещал. Он там не для этого. - SciFi(18.03.2025 10:13)
- не то что вера в выручку, но хочется понять логику. Похоже дело в
том, что работа SRAM1 и 2 как-то по другому идет? Тогда надо
учесть. Я недавно стал использовать SRAM2. Было какое-то
подсознательное недоверие. :-) - Лaгyнoв(18.03.2025 10:52)
- HardFault (в CM0 и у старших, если запрещен BusFault) вылетает не по границе массива (который есть чисто программная сущность и процессор ничего про него не знает), а по аппаратным границам. Например при попытке обратиться к несуществующей памяти (когда никто на шине не ответил на обращение процессора) или при попытке выполнить код из регистров периферии. - LightElf(18.03.2025 14:32)
- там ещё использование часто чуток разное. обычно в первую часть стек закидывается, а вторая прицепом ходит. - Vit(18.03.2025 12:33)
- Логика простая. Есть адреса. Только вам ведомо, как адресная арифметика может накосячить - она же из-под вашего пера вышла. Ну и адрес может попасть в SRAM1, SRAM2 или куда-то ещё. - SciFi(18.03.2025 11:24)
- не то что вера в выручку, но хочется понять логику. Похоже дело в
том, что работа SRAM1 и 2 как-то по другому идет? Тогда надо
учесть. Я недавно стал использовать SRAM2. Было какое-то
подсознательное недоверие. :-) - Лaгyнoв(18.03.2025 10:52)