Отговори на тема  [ 206 мнения ]  Отиди на страница Предишна  1 ... 5, 6, 7, 8, 9, 10, 11 ... 14  Следваща
Изпитан toolchain за Cortex M3. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
undefined reference си означава точно това което пише - съответния символ не е дефиниран никъде в изброените сорсове и библиотеки...
Като гледам това са ти функции предвидени за портване. Демек или си взел някаква "отворена" библиотечка дето трябва да й дописваш едно-друго, или трябва да линкнеш още нещо...


Сря Апр 15, 2009 9:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ми знам ли ги какви са. Сега като се загледах в thumb2\libc.a установих, че е в CodeSourcery (това дето мъча в момента) е къде 700Kb. Докато в yagarto \thumb\libc.a е 3Мб и кусур. Едва ли разликата идва само от двойката в thumb-a. :cry:

уф, не ми се билдва Newlib сега.... Аман.

P.S.

https://support.codesourcery.com/GNUToolchain/kbentry57

бла, бла.... абе що трябва да е просто като може да е сложно?

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Апр 15, 2009 9:36 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Борбата продължава. И е безмилостно жестока :)

Значи оказа се че проблема идва от линкерския фаил и библиотеката със стартъп кода. Намерих един комплект правен от някакъв ентусиаст който работи. Не ми се дизасемблира за да разбера защо това което аз имах се дънеше и то баш кога реших да включа stdio :( Като остане време ще го изпощя.

Междувременно реших да се направя на треснат и да питам в CodeSourcery. Казаха ми да си изтегля евалюейшън на целия пакет (досега аз ползвах Lite) и после докато трае евалюейшъна да питам. Изтеглих го - оказа се доста добре сглобена система. Туловете са билднати с малко по нови версии. Отделно еклипса си е надрънкан с плъгини, вкл. и да менажира make файлове. Въобще една завършена система са сглобили. Като за 400$ - добра алтернатива на CrossWorks се получава.

Дано да остане време преди да изтече евалюейшъна да поексперемнтирам с моя проект върху нея. Защото засега го държа на мойта сглобка от тулове че поне работи (докато не намеря следващата дупка :) ). Интересно е дали нещата които аз не успях да пусна в еклипса (като например да ми дава съдържанието на периферните регистри) са ги подкарали и как. И дали може да се поодкрадне нещо от евалюейшъна, поне настройки на еклипса и пр :)

Естествено ми хрумна да взема от евалюейшъна само тулчейна и да го сглобя с моя еклипс, та поне да е с новите тулове. Да ама не. Вградили са проверка за лиценза даже във gcc.exe :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Апр 17, 2009 6:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Събота след обед е продуктивно време явно.

1. Проблема със стартъп кода вече изглежда отстранен. Сглобих една компилация между тази на ентусиаста и тази на CS.... работи добре... май.

2. Миро, установих защо не съм можел да виждам структурите с периферните регистри в expression прозореца. В твоя линкер фаил DEBUG level-a се задава като "dwarf-2". Ама така установих че elf файла е късичък - към 170К в моя случай. Като го изкомпилирам през комерсиалния CS става бая по голям. Загледах се и установих че те викат просто "-g3". Като го промених в твоя МакеFile и при моя тулчеин вече се виждат регистрите :) Рових по документацията да видя тая чудесия що се получава и открих следното:

Цитат:
Level 3 includes extra information, such as all the macro definitions present in the program. Some debuggers support macro expansion when you use ‘-g3’.
‘-gdwarf-2’ does not accept a concatenated debug level, because GCC used to support an option ‘-gdwarf’ that meant to generate debug information in
version 1 of the DWARF format (which is very different from version 2), and it would have been too confusing. That debug format is long obsolete, but the
option cannot be changed now. Instead use an additional ‘-glevel’ option to change the debug level for DWARF2.


Не ми стана много ясно :(. Както и да е.

P.S.

Оказа се че проблема е частично решен. След като включих -g3, "Някой" от #define струkтурите взеха да се виждат, други не. Общо взето периферните регистри са дефинирани като :
Цитат:
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
...
...
...
#define PERIPH_BASE ((u32)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
...
...
...
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)


Такъв тип структури понякога се виждат в дебъгера, понякога не. Като отида с курсора на "GPIOA" - ми показва че е дефинирано като " ((GPIO_TypeDef *) GPIOA_BASE)". Въобще всичките дефиниции правени с #define ги вижда. Не вижда обаче дефиницията "GPIO_TypeDef" типа. Тоест не винаги. Установих че вижда тези които в програмата са предавани като параметри на функция. Т.е. ако съм предавал променлива от въпросния тип структура на някоя функция, дебъгера разпознава тази структура и в Expresions. Тези които не съм предавал като параметри, а например съм ги ползвал директно в израз - тях дебъгера отказва да ги види.

Шантава история. Явно поради някаква причина типовете използвани като параметър на функция влизат в Debug информацията. А другите не.

T.e. ако някъде имам дефинирано

GPIOA ptrToGPIOAStruct;

което после ползвам - дебъгера вижда типа GPIO_TypeDef.

Но ако просто съм използвал в кода:

GPIOA->CRL = 0x00

Дебъгера си прави пас, защото типа GPIO_TypeDef го няма в debug инфото....

Дали е някаква настройка.... Всъщност има ли начин да разгледам в някакъв нормален вариант каква дебъг информация имам в изходните файлове (.о и .elf)?

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Последна промяна Цецо на Съб Апр 18, 2009 6:53 pm, променена общо 2 пъти



Съб Апр 18, 2009 5:28 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Тая опция прави всички #define видими в дебъгера. Поне такива ми са впечатленията ми на първо четене.

Ако ме беше питал дали дефайните могат да се виждат в GDB щях да те излъжа... добре че не си ме питал :-)

Иначе други разлики при мен не откривам (засега).

Аз в много редки случаи ми се е налагало някакъв #define израз в дебъгера, (може би щото подсъзнателно съм го избягвал) но отсега нататък ще се възползвам и от тая възможност. Мерси че я откри ;-)


Съб Апр 18, 2009 6:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Цецо написа:
Всъщност има ли начин да разгледам в някакъв нормален вариант каква дебъг информация имам в изходните файлове (.о и .elf)?


Има и то много: http://www.gnu.org/software/binutils/

За дъмпване на дебъг символи обикновено се ползва nm (в нашия случай arm-elf-nm).. Но не ми питай за подробности, те са 100 инструмента с 1000 опции всеки. Аз навремето като писах мейк файла пусках разни неща да генерират листинги и прочие...


Съб Апр 18, 2009 6:47 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Май 17, 2006 4:22 pm
Мнения: 34
Местоположение: софия
Мнение 
Цецо написа:
Шантава история. Явно поради някаква причина типовете използвани като параметър на функция влизат в Debug информацията. А другите не.

T.e. ако някъде имам дефинирано

GPIOA ptrToGPIOAStruct;

което после ползвам - дебъгера вижда типа GPIO_TypeDef.

Но ако просто съм използвал в кода:

GPIOA->CRL = 0x00

Дебъгера си прави пас, защото типа GPIO_TypeDef го няма в debug инфото....

Дали е някаква настройка.... Всъщност има ли начин да разгледам в някакъв нормален вариант каква дебъг информация имам в изходните файлове (.о и .elf)?


при мен като пробвам да покажа GPIOA, дебъгерът го показва, като пробвам да покажа GPIO->CRL - не става
опитай само GPIOA да ти покаже

също така, ако ти казва, че няма символ GPIO_TypeDef, то може би в модула, в който си в момента, наистина няма debug информация за този тип - при мен така се получава ако - точно както казваш - просто напиша GPIOA->CRL, в този случай, в дебъг информацията се вижда следното (прилагам и проста програма, която ползвам за проба)

Код:

<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
  < c>     DW_AT_macro_info  : 0       
  <10>     DW_AT_stmt_list   : 0       
  <14>     DW_AT_high_pc     : 0x80483a8       
  <18>     DW_AT_low_pc      : 0x8048384       
  <1c>     DW_AT_producer    : GNU C 4.1.2 (Gentoo 4.1.2 p1.1) 
  <3c>     DW_AT_language    : 1        (ANSI C)
  <3d>     DW_AT_name        : 1.c     
  <41>     DW_AT_comp_dir    : /home/shopov     
<1><4e>: Abbrev Number: 2 (DW_TAG_base_type)
  <4f>     DW_AT_name        : int     
  <53>     DW_AT_byte_size   : 4       
  <54>     DW_AT_encoding    : 5        (signed)
<1><55>: Abbrev Number: 3 (DW_TAG_subprogram)
  <56>     DW_AT_external    : 1       
  <57>     DW_AT_name        : main     
  <5c>     DW_AT_decl_file   : 1       
  <5d>     DW_AT_decl_line   : 20       
  <5e>     DW_AT_prototyped  : 1       
  <5f>     DW_AT_type        : <4e>     
  <63>     DW_AT_low_pc      : 0x8048384       
  <67>     DW_AT_high_pc     : 0x80483a8       
  <6b>     DW_AT_frame_base  : 0        (location list)


програмата е:
Код:
typedef struct
{
int CRL;
int CRH;
int IDR;
int ODR;
int BSRR;
int BRR;
int LCKR;
} GPIO_TypeDef;
//GPIO_TypeDef aaa;

#define PERIPH_BASE ((long)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

int main(void)
{
   GPIOA->CRL = 0;
   return 0;
}


както се вижда - да, наистина дебъг информация за типа GPIO_TypeDef няма; обаче като махна коментара в реда //GPIO_TypeDef ааа;
Код:
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
  < c>     DW_AT_macro_info  : 0   
  <10>     DW_AT_stmt_list   : 0   
  <14>     DW_AT_high_pc     : 0x80483a8   
  <18>     DW_AT_low_pc      : 0x8048384   
  <1c>     DW_AT_producer    : GNU C 4.1.2 (Gentoo 4.1.2 p1.1)   
  <3c>     DW_AT_language    : 1   (ANSI C)
  <3d>     DW_AT_name        : 1.c   
  <41>     DW_AT_comp_dir    : /home/shopov   
<1><4e>: Abbrev Number: 2 (DW_TAG_structure_type)                            --------------------------- вече има информация за типа
  <4f>     DW_AT_sibling     : <bb>   
  <53>     DW_AT_byte_size   : 28   
  <54>     DW_AT_decl_file   : 1   
  <55>     DW_AT_decl_line   : 2   
<2><56>: Abbrev Number: 3 (DW_TAG_member)
...........................


дебъг информацията се появява, и ако искаш да гледаш израза GPIOA - трябва да работи (при мен работи); тоест - може да опиташ да дефинираш някаква неизползвана (но глобална) променлива от тип GPIO_TypeDef в модула, който искаш да дебъгваш (за да ти се генерира дебъг информация за този тип), и после да си я махнеш като си привършил с дебъга

изрази като GPIOA->CRL, обаче, май няма смисъл да се мъчиш да покажеш - едва ли ще стане

във всички примери от по-горе, компилиране с -g3 е задължително; debug информацията е изведена с objdump, но ако смяташ да гледаш по-надълбоко - изтегли си dwarfdump (objdump я показва по-примитивно)


Нед Апр 19, 2009 12:10 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
@шопов
Точно същото се получава и при мен. Явно когато просто е дефиниран тип, без да е декларирана променлива от този тип, информацията липса в дебъгера.

При мен проблема изкочи защото имам дефиниран тип структура за регистрите управляващи клок системата. Понеже в кода просто директно ползвам въпросния тип през указател за достъп до въпросните регистри (без да дефинирам изрично променлива) и компилатора не слага дебъг информация. В момента в който декларирам променлива съдържаща този тип под някаква форма и дебъгера вече вижда въупросния тип.

Явно си е особенност на GNU компилатора. Сигурно си имат причина да е така. А може и да нямат , причина, а просто на никой да не му пречи достатъчно проблема. Не че е болка за умиране де. Апропо променливата не е нужно даже да е глобална или статична - и със локална в стека пак става номера. Та ако е чак толкоз зор може да се сложи една куха функция дето да ги издекларира колкото за дебъгването.

За мен е по важно, че стигнах до прозрението за -g3, щото без него си беше съвсем мъка. Ама пусто GNU - откриваш топлата вода на всеки 2-3 дена, мама му стара.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Нед Апр 19, 2009 1:17 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Цецо, дай някакъв линк към сайта на онзи ентусиаст от който си взел линкер скрип и стартъп файловете. Интересно ми е как това е разрешило проблема с undefined reference. Щото единственото което ми идва наум на мене е както казва шопов да се направят празни дефиниции в самия линкер скрипт. Нещо такова:
PROVIDE(_write = 0);

_________________
Най-опасният враг на истината и свободата е мнозинството.


Нед Апр 19, 2009 4:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Линкерския скрипт няма отношение към решаването на проблема. Стартъп кода също.

Проблема си се реши частично с -g3 опцията, а останалата част от проблема ми изглежда нерешима, щото аз поне го виждам като "особенност" на компилатора. Всъщност решима е по "заобиколен"
начин с празни дефиниции (в линкерския фаил или директно в кода). Но аз поне по елегантен начин не съм намерил засега.

В стартъп кода и линкерския фаил който ползвам няма никакви дефиниции на регистри. Проблема там беше друг, че Code Sourcery имат собствена концепция за библиотеките и в частност стартъп кода. Нищо особенно, просто някой дефиниции на секции и въобще стартирането на кода, трябва да са направени по техния си начин, иначе все някога линкването гърми (при мен гръмна когато закачих stdio.). Въпросния ентусиаст просто се е поровил в комерсиалната версия на CS, която си идва с сорсовете и е преправил една версия на стартъпа и линкерския фаил za Luminary която да работи на STM32. Всъщност в последната версия на CS също има подръжка на STM32, но е направена малко постно.

Въпросния пич няма страница. Във форума на ST е прикачил неговете файлове. Ако искаш да ти ги дам, ама едва ли ще видиш нещо интересно вътре - пак казвам те нямат никакво отношение по въпроса с дебъгера, най нормални са си. Още повече че въпросния пич беше заявил, че по отношение на GDB - той с такива неща не си цапа ръцете. :)

Още малко да напредна в проекта, да се уверя че работят туловете що годе гладко (до колкото е възможно) и направо ще пусна тук сглобения тулчеин.

Дотук тулчейна на CS се държи прилично. еклипса също е подкаран на прилично ниво. Мейква се през скрипта на Миро. Дебъгва се през Jlink/GDB. Абе позалепнаха след 3 седмици борба нещата.....

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Нед Апр 19, 2009 8:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Ти май не ме разбра. Имах впредвид именно проблема с undefined reference малко по-нагоре, а не този с дебъгването. Иначе следя темата от любопитство. Все ще дойде момент когато и аз ще трябва да търся развойни средства за Cortex-M3. Аз лично не съм много придирчив към дебъгера. Да може да служи и за loader, да има там 1-2 brakepoint-a и memory прозорец е абсолютния минимум за мен. От там нагоре каквото има в повече е добре дошло.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Нед Апр 19, 2009 9:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Да, не съм те разбрал.

Ето линкерския фаил който ползвам в момента. Както казах той е компилация от няколко източника, засега се справя добре.

Проблема с undefined reference, поне според мен, беше следния. По неведоми за мен причини (сигурно има идея някаква) CS са разбили newlib на няколко файла. Включването само на стандартната libc.a не върши особенна работа. В момента в който реших да включа stdio и то гръмна. Предполагам че са правили правили различни версии, за различните ядра във различните режими или нещо от сорта. Защото техния тулчеин има претенциите да се търкаля върху всякакви армове, а не само Cortex М3.

Та "включването" на правилните библиотеки става със следния ред от линкерския фаил:

GROUP (-lgcc -lc -lcs3 -lcs3unhosted -lcs3-stm32)

Последното е стартъп кода и дефиниция на прекъсванията и ексепшъните. Това ми беше следващия проблем, защото CS в Lite версията ги нямат готови за stm32. В последствие се оказа че имат един common, който може да се ползва, ама тогава не го знаех. В платената версия има доста добре направени за Luminary, за съжаление за STM32 отново се разчита на common версията. Която така като я гледам няма причини да не работи де. Това което не и харесах, е че дефинициите на функциите които ще обслужват прекъсванията са с имена например __cs3_isr_external_27, което не е много удобно при работа. Докато в този който аз ползвам, ентусиаста си ги е кръстил както са си на STM32 - например DMAChannel7_IRQHandler (Кортекса си има отделни вектори за всяко прекъсване, за разлика от 7TDMI, там подобна ситуация не изниква).

Абе общо взето хората които правят CS определено действат на високо ниво. Просто като скочиш на lite версията се налага в движение да откриваш топлата вода.

Апропо намерих една "прекомпилация" на туловете базирана на CS. Тя обаче си е правена само за Cortex и библиотеките просто са си компилирани за thumb2. Там въпросния проблем не изскача - всичко си има в libc.a и stdio се компилира без проблем. Но аз мисля да остана на CS. Все пак пичовете вадят редовно ъпдейти. Е сега комерсиалната вече има 2009 пролет, докато Lite е още на 2008 Q3, ама бърза работа нямам.

Апропо stdio го изключих в момента в който компилацията мина като хората. Все пак 20К Flash за един пиклив sprintf().... е нема нужда :)


Прикачени файлове:
stm32-rom.ld.txt [6.68 KiB]
147 пъти

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
Вто Апр 21, 2009 10:40 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Nikola Kirov написа:
Цецо написа:
Също така се чудя как да дефинирам bool така че да ползва възможностите на Кортекс за bit-bang.


За това не е нужно нещо специално от компилатора. IAR няма нещо специално по въпроса също. Просто си правиш сегмент в съответната област на паметта и там поместваш този тип променливи.


Да не отварям нова тема.... да речем имаш битов масив в съответното адресно пространство, но то съответства на друг адрес в нормалното адресно пространство. НАпример 0x20000000 се адресира като 0x22000000, 0x22000010 i tn.
Обаче линкера има ли идея за това? Нали може да разположи друга променлива и да ти затрие битовия масив ?


Пет Окт 23, 2009 2:13 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Битовия масив си го декларираш като байтов да примерно в нормалното адресно пространство. Тоест резервираш си място за него. А за работата побитово си декларираш да кажем един указател и така си работиш с битовия масив.


Пет Окт 23, 2009 2:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Някой ползва ли Yagarto?

Аз реших да ъпдейтна... и голяма грешка ;-)
Асемблерът (AS) гърми с unhandled exception всеки път като се вика, а аз го викам индиректно през GCC. Отделно С-то ми бълва 1000+ предупреждения, при условие че досега нямаше нито едно...

-------
edit:
гърмежа идва от опцията -matpcs
Нямам идея що гърми, но и без тая опция се живее...


Съб Яну 09, 2010 8:04 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 206 мнения ]  Отиди на страница Предишна  1 ... 5, 6, 7, 8, 9, 10, 11 ... 14  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни