ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
1129299 Топик полностью
evgeniy1294 (03.09.2021 16:50, просмотров: 331) ответил Rainman62 на Снова насчет ATSAML21(упоминался парой постов ниже), но с другой стороны. Портирую этот проект из emBitz в Eclipse-gcc-makefile. В исходном emBitz проекте вызов __libc_init_array() из ResetHandler ничего не вызывает. Во всяком случае implementation отсутствует и в пошаговом режиме никуда не переходит. Но работает. У меня же этот вызов вызывает нарекания у линкера. Скачал с гитхаба CMSIS, однако и там не нашел реализацию .. Неправильный CMSIS? Приложил ссылку на проект.
Ни при чём тут CMSIS. Функцию __libc_init_array() предоставляет библиотека компилятора - это вызов конструкторов для статических объёктов. 

Вообще, мне у них ld-скрипт не нравится, мусора много. Стоит указать ENTRY(Reset_Handler).

Возможно нужно сделать так:

extern void __libc_init_array();

А символ _init используется внутри этой функции. Его упоминание есть в ld-скрипте. Вот такой вариант реализации я нашел:

extern void _init (void);

/* Iterate over all the init routines.  */
void
__libc_init_array (void)
{
  size_t count;
  size_t i;

  count = __preinit_array_end - __preinit_array_start;
  for (i = 0; i < count; i++)
    __preinit_array_start[i] ();

  _init ();

  count = __init_array_end - __init_array_start;
  for (i = 0; i < count; i++)
    __init_array_start[i] ();
}