ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 апреля
441643 Топик полностью
fk0, легенда (13.09.2013 18:59, просмотров: 227) ответил Mahagam на ну вообще-то контроллер памяти в нормальных камнях при обращения к null валит ядро в data-abort. ну и что значит "не так фатальна" ?? а может она и соседнюю задачу точно также бы "нефатально" ушибила бы?
Нормальных камнях? Речь об MPU? А при обращениии (struct xxx)(NULL)->element не валит в abort? Вот в (ds)PIC замечательно. По адресу 0 -- регистры (WREG)... Никакого abort. В ARM7, например, в многих МК с адреса 0 флеш или ОЗУ. Тоже как-то без абортов. Это у кого это там аборты? А ведь аборты не только на запись нужны, но и на чтение, по-уму то. И сразу ньюанс. MPU может сразу ограничить регион в который писать/читать можно. А без MPU, если и будет аборт, то очень хорошо промахнуться нужно. Т.е. обнаруживаемость ошибок совсем не та. УМВР -- это не аргумент. Это лишь говорит о том, что, скорей, средств обнаружения ошибок нет. Какие средства отладки используются? Статическая проверка кода? Кросс-компиляция на PC (дада, для отладки)? И вылет за пределы массива -- это не единственная ошибка. Вылет за пределы массива может испортить какие-либо данные в стеке, например. А там может быть адрес возврата, и дальше будет что угодно. Или там может быть указатель кадра стека, и тоже что угодно. Или просто указатель как переменная. И уже практически порча произвольной области памяти, при обращении на запись. И не обязательно вылет за пределы массива, а не какой-нибудь неправильный snprintf или scanf с неправильным типом данных. Или где-то (void*) случайно не к тому типу (int vs long) приводится. Или где-то работа с указателями и ошибка с sizeof(). Или идёт обращение к высвобоженной памяти (free) и уже повторно занятой другими данными, а там опять же указатели (например, какие-либо структуры данных вроде связных списков или деревьев). Или выделяется недостаточноый (malloc) объём памяти из-за ошибки с sizeof опять же, или из-за вылезания за пределы массива действительно, или из-за получения отрицательного размера массива приведённого к беззнаковому целому. Вариантов масса, весьма разнообразнейших. И "у меня нет ошибок" может говорить только автор микро-проектов типа hello world, где всё влезает в пару файлов, не используются библиотечные функции и всё такое. Ну так для таких проектов и не нужны MCU с флешем по 2 мегабайта, там atmega8 в самый раз. Короче вывод такой MPU -- важная и нужная вещь в современных МК, где программирование уже несколько оторвалось от "профессионального уровня PIC18" и приближается к программированию "как на ПК".
[ZX]