Croman13n3c 0 12 декабря, 2012 Опубликовано 12 декабря, 2012 · Жалоба Стараюсь перенести проект из CoIDE в Eclipse Juno. Заготовку makefile`а взял из scmrtos. Сами объектники компилируются, но не собираются в окончательный бинарник: text data bss dec hex filename 0 0 0 0 0 exe/PIR_NEW.elf Подозреваю ошибку в параметрах линкера, но вот что именно не так - хз. makefile.txt LPC1756.ld.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 12 декабря, 2012 Опубликовано 12 декабря, 2012 · Жалоба Видимо в настройках CoIDE что-то осталось не перенесённым в новую среду. Какие-нибудь дефайны, например. Это я так подозреваю, файлы не смотрел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Croman13n3c 0 13 декабря, 2012 Опубликовано 13 декабря, 2012 (изменено) · Жалоба Поизучав map файл стало ясно, что он практически все секции исключил из бинарника Discarded input sections .text 0x00000000 0x0 obj/main.o .data 0x00000000 0x1 obj/main.o .bss 0x00000000 0x14 obj/main.o ........... Секция линкер скрипта относящаяся к rom .text : { KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata .rodata* .gnu.linkonce.r.*) } > rom .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > rom __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > rom __exidx_end = .; .conf : AT (0x28000) { . = ALIGN (4); _conf_begin = .; KEEP(*(.conf .conf*)) . = ALIGN(4); _conf_end = .; } >rom PIR_NEW.map.txt Изменено 13 декабря, 2012 пользователем Croman13n3c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба Поизучав map файл стало ясно, что он практически все секции исключил из бинарникаПокажите нам этот .map тоже. Можно сделать предположение, что причина в том, что все секции "тянутся" вслед за таблицей векторов, которая обязательно помещается в выходной файл директивой KEEP(*(.isr_vector .isr_vector.*)). А вот если в вашем проекте нет таблицы векторов или эта таблица в исходнике помещается не в секцию .isr_vector или .isr_vector.* Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Croman13n3c 0 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба Таблица векторов есть и помещается в isr_vector: __attribute__ ((section(".isr_vector"))) void (* const g_pfnVectors[])(void) = { /*----------Core Exceptions------------------------------------------------ */ (void *)&pulStack[STACK_SIZE-1], /*!< The initial stack pointer */ Reset_Handler, /*!< Reset Handler */ NMI_Handler, /*!< NMI Handler */ HardFault_Handler, /*!< Hard Fault Handler */ MemManage_Handler, /*!< MPU Fault Handler */ BusFault_Handler, /*!< Bus Fault Handler */ UsageFault_Handler, /*!< Usage Fault Handler */ 0,0,0,0, /*!< Reserved */ SVC_Handler, /*!< SVCall Handler */ DebugMon_Handler, /*!< Debug Monitor Handler */ 0, /*!< Reserved */ PendSV_Handler, /*!< PendSV Handler */ SysTick_Handler, /*!< SysTick Handler */ /*----------External Exceptions---------------------------------------------*/ WDT_IRQHandler, /*!< 0: Watchdog Timer */ TIMER0_IRQHandler, /*!< 1: Timer0 */ TIMER1_IRQHandler, /*!< 2: Timer1 */ ............... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба Таблица векторов есть и помещается в isr_vector:Вы хотите потренировать наши способности к телепатии? Покажите .map Если она помещается в нужную секцию - почему ее нет в выходном файле? Возможно вы не подключили файл с этой таблицей к проекту, да и еще сотня причин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Croman13n3c 0 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба Вот map файл: PIR_NEW.map.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба В map нет ни одного упоминания g_pfnVectors. В каком файле находится объявление этого массива? Компилируется ли этот файл? Передается ли его объектник линкеру? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба В map нет ни одного упоминания g_pfnVectors. В каком файле находится объявление этого массива? Компилируется ли этот файл? Передается ли его объектник линкеру? А не является ли это куском startup-кода от CoIDE, который линкуется им по умолчанию (библиотека) и о котором gcc не знает ничего. (Аналогия с CodeSourcery, версии lite и коммерческая) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба похоже на то..... но какбы gcc принципиально никаких предположений не делает - какое ему дело до стартап кода и таблицы векторов - он их и вообще не различает одругого кода - зачем ему оно. это уже ты сам должен скомпилять все что нужно и передать ликуру - это твоя забота чтобы там была таблица векторов и твоя забота чтоб ее линуер использую тови указания в скрипте положил по нужному адресу. я вот мотрю тоже пока ниче непонятно. если найду косяг отпишусь. код Reset_Handler в студию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 13 декабря, 2012 Опубликовано 13 декабря, 2012 · Жалоба Может добавление такой строки ENTRY(Reset_Handler) что-то изменит? Или она в другом файле? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Croman13n3c 0 14 декабря, 2012 Опубликовано 14 декабря, 2012 (изменено) · Жалоба В map нет ни одного упоминания g_pfnVectors. В каком файле находится объявление этого массива? Компилируется ли этот файл? Передается ли его объектник линкеру? Находится в startup_LPC17xx.c. Не компилировался и не передавался (упс, еще не собиралась lpc17xxlib), но после исправления лучше не стало - линкер сыплет ошибками linker.txt А не является ли это куском startup-кода от CoIDE, который линкуется им по умолчанию (библиотека) и о котором gcc не знает ничего. (Аналогия с CodeSourcery, версии lite и коммерческая) Является , после перадачи линкеру объектника - он сыплет ошибками (прикрепил отчет выше) похоже на то..... но какбы gcc принципиально никаких предположений не делает - какое ему дело до стартап кода и таблицы векторов - он их и вообще не различает одругого кода - зачем ему оно. это уже ты сам должен скомпилять все что нужно и передать ликуру - это твоя забота чтобы там была таблица векторов и твоя забота чтоб ее линуер использую тови указания в скрипте положил по нужному адресу. я вот мотрю тоже пока ниче непонятно. если найду косяг отпишусь. код Reset_Handler в студию #pragma weak Reset_Handler = Default_Reset_Handler void Default_Reset_Handler(void) { /* Initialize data and bss */ unsigned long *pulSrc, *pulDest; /* Copy the data segment initializers from flash to SRAM */ pulSrc = &_sidata; for(pulDest = &_sdata; pulDest < &_edata; ) { *(pulDest++) = *(pulSrc++); } /* Zero fill the bss segment. This is done with inline assembly since this will clear the value of pulDest if it is not kept in a register. */ __asm(" ldr r0, =_sbss\n" " ldr r1, =_ebss\n" " mov r2, #0\n" " .thumb_func\n" "zero_loop:\n" " cmp r0, r1\n" " it lt\n" " strlt r2, [r0], #4\n" " blt zero_loop"); __asm(" ldr r0, =_sbss1\n" " ldr r1, =_ebss1\n" " mov r2, #0\n" " .thumb_func\n" "zero_loop1:\n" " cmp r0, r1\n" " it lt\n" " strlt r2, [r0], #4\n" " blt zero_loop1"); /* Setup the microcontroller system. */ SystemInit(); /* Call the application's entry point.*/ main(); } Может добавление такой строки ENTRY(Reset_Handler) что-то изменит? Или она в другом файле? Не изменило, в файле startup_LPC17xx.c Новый map после добавления добавления недостающих файлов: PIR_NEW.map.txt После последних исправлений добавил заглушки к newlib - сборка завершена успешно. Надо мне внимательней читать выхлоп средств сборки. Спасибо за помощь. Изменено 14 декабря, 2012 пользователем Croman13n3c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 14 декабря, 2012 Опубликовано 14 декабря, 2012 · Жалоба .... Не изменило, в файле startup_LPC17xx.c ... В моём случае всё стало добавляться линкером в выходной файл после добавления в скрипт линкера строки: ENTRY(g_pfnVectors); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться