История изменений
Исправление 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
помещается и работает вполне приемлемо.