Цитата(ajkpro @ Feb 15 2013, 08:47)

Но теперь не понятно, почему ругается на _exit,
Кто на него ругается и как именно?
Если Вы имеете в виду сообщение об ошибке, процитированное в первом посте темы, то оно возникает из-за того что в функции
exit() есть ссылка на символ
_exit (проще говоря,
exit() вызывает
_exit()), которого линкер не смог найти. Подробности ищите в документации на используемую Вами библиотеку - там наверняка сказано, что если программист использует exit(), то он должен предоставить функцию _exit().
Цитата(ajkpro @ Feb 15 2013, 08:47)

добавил функцию _exit (естественно), но в map`е находим (exit),т.е. без подчерркивания?
Это что-то обозначает? Есть где-нибудь русские комментарии к map?
Это означает, что в Вашей программе используется функция exit(). Вызывается она, как я Вам уже говорил, в crt0.o. Какие еще комментарии Вы хотите услышать? Задайте конкретные вопросы, я постараюсь (в меру своего понимания) ответить...
Цитата(ajkpro @ Feb 15 2013, 08:47)

А нет у меня crt0, ни в проекте, ни в компилляторе. Точнее, нет такого файла.
Как это нет? Покажите вывод команды
ls -l /home/ajk/stm32/gcc-arm-none-eabi-4_7-2012q4/arm-none-eabi/lib/armv7-m/crt0.oЦитата(ajkpro @ Feb 15 2013, 08:47)

Но в компиляторе crt0 встречается в 120 файлах...
Или какие-то опции компиляции не корректно, или чего-то не понимаю.
Вы чего-то не понимаете. Судя по названию, это Ваш стартап-модуль. Иными словами, это модуль, содержащий код, выполняющийся при старте контроллера (после RESET), и, как правило, содержащий инициализацию среды (инициализацию указателя(ей) стека, секции .data, очистку .bss, выполнение конструкторов глобальных объектов и т.п.), и после этого вызывает main(). А после вызова main() у Вас там, видимо, и вызывается exit(). Если Вы знаете, что main() никогда не вернет управление, просто уберите весь код после вызова main(), так как он все равно не будет выполняться.
Сообщение отредактировал alx2 - Feb 18 2013, 04:51