История изменений
Исправление Barracuda72, (текущая версия) :
Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?
Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?
Еще пара нюансов (возможно, специфичных):
- В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл
os.cдобавилась еще пустая функция_initбез аргументов. - Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри
__libc_init_array. Решилось возвращением ld в качестве компоновщика (впрочем, это не обязательно) и ручным указанием правильных путей к библиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни-mcpu, ни-march, ни-mtune, ни-mthumbне помогают).
По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.
Исправление Barracuda72, :
Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?
Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?
Еще пара нюансов (возможно, специфичных):
- В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл
os.cдобавилась еще пустая функция_initбез аргументов. - Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри
__libc_init_array. Решилось возвращением ld в качестве компоновщика (впрочем, это не обязательно) и ручным указанием правильных путей к билиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни-mcpu, ни-march, ни-mtune, ни-mthumbне помогают).
По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.
Исходная версия Barracuda72, :
Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?
Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?
Еще пара нюансов (возможно, специфичных):
- В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл
os.cдобавилась еще пустая функция_initбез аргументов. - Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри
__libc_init_array. Решилось возвращением ld в качестве компоновщика и ручным указанием правильных путей к билиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни-mcpu, ни-march, ни-mtune, ни-mthumbне помогают).
По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.