ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Пятница
18 сентября
/1035785
Топик полностью
fk0 (12.09.2020 01:27 - 01:36, просмотров: 81) в ответ на BSS и Data у меня обнуляются и копируются из flash в ram соответственно, надо перед ними инициализацию pll воткнуть. Статические конструкторы вызываются через __libc_init_array(); - автор: evgeniy1294
Чего это стандартные файлы -- лишние? Во-первых они по стандарту должны быть. Просто вот должны и всё. Их кто-то может попытаться использовать. Что-нибудь в stderr записать. По крайней мере упасть не должно. Вообще stdout/stderr в контроллере удобно использовать для ведения лога (а отлаживать как -- по светодиодику что ли?) В более сложных и логгер более сложный (см. ниже)... 

С -fno-exception исключений у тебя вообще нет. Тот код, что их использует -- не скомпилируется. В таком коде часто для поддержки работы без исключений будет тупо зваться abort(), пример:


#include <stdexcept>

int main()
{
    #if __EXCEPTIONS
        throw std::runtime_error("fatal error");     
    #else
        fprintf(stderr, "fatal error\n");
        abort();
     
    #endif
       
    return 0;   
}

Можно убрать -fno-exceptions здесь: https://coliru.stacked-crooked.com/a/c564fdaa4947deb9


Ещё кстати std::terminate через std::set_terminate перехватывается (по-умолчанию именно abort).


Вообще на мой взгляд отключение исключений -- кроилово, когда выгребают последние проценты. Не уверен, что оправданное, а то потом будут тёплые ламповые истории про "последний байт" (https://habr.com/ru/post/27055/)


Дебажная сборка на самом деле мало интересна. Обычно всё кончается "логи тормозят программу -- выключите логи и тестируйте релизную сборку". И хорошо если от QA, a вообще не из поля прилетит баг: мол сбрасывается. И надо будет "угадать баг по скриншоту", причём в кратчайшие сроки, потому, что у заказчика массовый циклический ребут на тысячах устройств. Поэтому ассерты и какая-то диагностика именно в релизной сборке -- критически важны.


http://caxapa.ru/1019675

Циклический ребут -- классика жанра. Бутлоадер должен уметь функцию обнаружения проблемы, остановки на пятой попытке и перепрошивки с помощью не удаляемого и не обновляемого железно-работающего бутлоадера с синим экраном (мол включите в интернет и ждите)

Про циклические ошибки и ребуты:

http://caxapa.ru/902079?todo=full&hilite=%D1%86%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8


О логгере, разное, может кому будет полезным:

http://caxapa.ru/939437

http://caxapa.ru/963995

http://caxapa.ru/1005253

http://caxapa.ru/957696

http://caxapa.ru/958455

http://caxapa.ru/1012909

http://caxapa.ru/572775

http://caxapa.ru/401461

[ZX]
Ответить
Ответы