Отговори на тема  [ 5 мнения ] 
Помощ за Eclipse? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение Помощ за Eclipse?
След дълго отлагане пак реших да опитам да се запозная с еклипс.

Използвам SAM7S и Jlink, инсталирал съм нужните програми, сега идва ред на настройките на средата и дебъгера.

Като за начало с примерите за нов проект всичко тръгна, но за нещо по сложно блокирам.

Проекта с който ще правя опити е разделен на две части:
1)-бутлодер, записан във флаша но се стартира в рам, след инит на АРМ с .s файла, се пуска бутлодера и след проверка за налично приложение предава управлението на него.
2)-основно приложение

Всяка от двете части e в отделни директории и си има отделни makefile.
Не ми е ясно как се компилират и дебъгват тези две части в един проект.

Успявам да излъжа еклипс да компилира основното приложение използвайки BUILD TARGETS от менюто което се отваря с десен клик по името на проекта, но не и с BUILD PROJECT.

Също конфигурирах някак си дебъгера и го пуснах, но след като флашне процесора изписва че не намира MAIN функцията. Усещам че това трябва да се свърже по някакъв начин с бутлодера но не знам как.

Въобще в момента от много новости с мейкове, кракове и непознати среди, не мога да формулирам в какво е проблема и къде да прочета как да го реша.


Съб Авг 28, 2010 7:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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

CDT-то към него го настройва за Ц/Ц++ включая и организирането на проекта, но за начало по-добре с мейкфайлове сам да си правиш нещата, т.е. "проекта" на еклипс няма нищо общо. Само организацията е обща - правиш си една директория за workspace и в нея като поддиректории си слагаш проектите. В еклипса му казваш че са мейкфайл проекти и той сам ще си намери всичко.
Но най-добре в началото без еклипс, просто пускаш команд промпт в директорията на проекта, мейк и гледаш дали всичко е точно. Не знам кой тулчейн ползваш, но наскоро повечето минаха от "arm-elf" на "arm-non-eabi" и съответно ако мейкфайловите ти са по-стари може да се наложи да ги преправиш...

Що се отнася до дебъгване на два проекта едновременно, това е по-сложничко... Но не мисля че ти трябва. По-добре в началото ги дебъгвай един по един. Бутлоадера ти е нормален проект, дебъгваш до момента в който предава управлението. Фърмуера ти също е нормален проект, разликата е само в началния адрес, ама то това си ти е зададено в линкерския скрипт.
От теб се иска само да програмираш който файл където трябва в паметта на процесора. С JLINK е малко по-сложно че няма конзолен интерфейс (поне нямаше навремето) та ще трябва да викаш JFLASH.
Иначе в еклипса ти препоръчвам Zylin плъгина, там в Debug Gonfigurations имаш Commands таб. В тоя таб се пишат GDB команди дето да се извикат преди дебъгване. Тук аз си слагам програмиранията, слагам си разни инициализации ако искам, променям програмния брояч да сочи където искам да започне дебъгването и т.н. Накрая е добре да сложиш една "si" (siingle instruction step) така че еклипса да се позиционира и опресни.. Така като натиснеш дебъг бутончето то ще програмира инициализира, рефрешне и ще си там където искаш да дебъгваш.


Нед Авг 29, 2010 12:00 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
JLink Flash i GDB server, са сложени и работят.
Ползвам готов проект.
Всички мейкове са преправени и работят от промпта, всичко се чисти и компилира видимо без грешки
Еклипса е среда която има много менюта и настройки.
Именно в тези настройки виждам моя проблем.
С твоя съвет всичко да стане на подпроекти с компилирането нещата тръгнаха.
Остана дебъгването, копирах от някъде скрипт който флашва и настройва дебъгера.
Като стартирам дебъга в конзолата се показва следното

Код:
target remote localhost:2331
0x00000000 in ?? ()
monitor flash device = AT91SAM7X256
Select flash device: AT91SAM7X256

monitor flash download = 1
Flash download enabled

monitor flash breakpoints = 1
Flash breakpoints enabled

monitor endian little
Target endianess set to "little endian"

monitor speed 30
JTAG speed set to 30 kHz

monitor reset 8
Resetting target (SAM7 soft reset)

monitor sleep 10
Sleep 10ms

monitor writeu32 0xFFFFFD44 = 0x00008000
Writing 0x00008000 @ address 0xFFFFFD44

monitor writeu32 0xFFFFFC20 = 0x00000601
Writing 0x00000601 @ address 0xFFFFFC20

monitor sleep 10
Sleep 10ms

monitor writeu32 0xFFFFFC2C = 0x00480a0e
Writing 0x00480A0E @ address 0xFFFFFC2C

monitor sleep 10
Sleep 10ms

monitor writeu32 0xFFFFFC30 = 0x00000007
Writing 0x00000007 @ address 0xFFFFFC30

monitor sleep 10
Sleep 10ms

monitor writeu32 0xFFFFFF60 = 0x00480100
Writing 0x00480100 @ address 0xFFFFFF60

monitor sleep 100
Sleep 100ms

monitor speed 12000
JTAG speed set to 12000 kHz

load
Loading section .fpgaimage, size 0xa4bc lma 0x102000
Loading section .start, size 0xf4 lma 0x110000
Loading section .text, size 0x13fc0 lma 0x1100f8
Loading section .data, size 0x4 lma 0x1240b8
Start address 0x110001, load size 124276
Transfer rate: 527 KB/sec, 11297 bytes/write.
break AppMain
Breakpoint 1 at 0x118a3a
continue


след като изпише това не мога да изпълнявам нищо, не показва деасемблер, няма стъпки, сякаш нещо липсва


Нед Авг 29, 2010 2:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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



Не ти е там проблема, не обвинявай Еклипса щото той си е само редактор ;-)

Накратко от конзолата ти се вижда следното - GDB (това е дебъгера на GNU) се конектва към софтуера на segger (GDB server), пуска му разни команди, той видимо ги изпълнява, зарежда сорса, слага някъде брейкпоинт и след дава go/run (т.е. continue). Ако така свършва лога, значи най-вероятно таргета ти бачка и цикли някъде, но просто не достига до бейкпоинта както може би се очаква...

Сега тук има няколко момента и въпроси....
1) С Zylin ли си или с вградения плъгин?

Между двата има няколко дребни разлики. Примерно Zylin сканира за .gdbinit файл и ако го намери и от него може да изпълни скрипт, макар че тоя скрипт от лога предполагам си го сложил ти в Debug settings->command.... Все пак го казвам в случай че не знаеш кой ги вика тия команди и къде се намират ;-)

Между другото скриптовете наистина най-добре да си ги слагаш в .gdbinit вместо в Еклипс. При GNU се работи с файлове и конзоли, който иска wizard и големи приложения със сложни настройки по-добре да си ползва IAR или други комерсалки...
В .gdbinit като свикнеш да бачкаш ще си напишеш множество скриптове, които след това може да викаш от конзолата. Примерно тоя скрипт ресетва и прави разни неща, но те не ти трябват само като стартираш дебъгването. По някое време ще искаш да рестартираш лесно... затова аз си пиша скрипт който кръщавам "сс", после докато дебъгвам ако искам да рестатирам само пиша "сс" в конзолата...

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


2) спомена SAM7S а пък на JLINK казваш SAM7X....

3) провери си флашването. Предполагам знаеш, но ако не знаеш командата "monitor" e всъщност начин да си говориш с емулатора. Съответно всичко с monitor.... са команди към JLINK сървъра, който аз не познавам и не мога да ти помогна много. Знам че "monitor reset" ресетва таргета но не знам какво прави monitor flash download=1. Може би разрешава някакъв интерфейс щото навремето единствения начин да флашваш беше с JFLASH сега може да са измислили нещо, но така или иначе това НЕ ми прилича на флашване. Нито му казваш какво да флашва нито къде да го флашва...
Тъй де намери си начин да се убедиш че таргета е флашнат правилно, ако искаш го флашвай предварително твой си проблема ;-)

4) Пишеш някакви неща на адрес 0хFFF.... Или аз съм позабравил SAM7 или ти пишеш в небитието ;-)


5) Слагаш брейкпоинт на AppMain... интересното е че го имаш в мап-а, но дано знаеш каква е тая функция и защо й слагаш брейкпоинт, Иначе аз нямам идея защо го правиш... Виждал съм да слагат брейкпоинт на main() - това в случай че имаш асемблерски файлове за стартъп и искаш да отидеш да дебъгваш от С-кода.

Според мен най-добре изобщо да не го пускаш да тръгва. Е верно като почнеш да дебъгваш ще ти е на ресет вектора (асемблер) ама то така е най-правилно. Почваш да дебъгваш от ресет вектора, ако искаш да прескочиш нещо ти сам ще си сложиш брейкпоинт и ще му дадеш continue (c) ....



Цитат:
след като изпише това не мога да изпълнявам нищо, не показва деасемблер, няма стъпки, сякаш нещо липсва


Отиваш в Debug перспективата (ако не си вече там) и там има едни бутони за run за pause... Може да не са активни, щото GDB е уж за дебъгване на много процеси едновременно, там в дебъг перспективата има един списък със сесиите. В твоя случай ще е само една сесия, но все пак трябва да е избрана, за да бачкат бутоните за stop, step go и т.н.

Та с две думи просто трябва да спреш таргета и след в конзолата може да си пишеш команди, или ако искаш да ползваш дебъг нещата в Еклипс...


Нед Авг 29, 2010 6:00 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
Погрешно наричам цялата поредица от програми или тулчен с едно нарицателно Еклипс, защото виждам него.
Съгласявам се, че той е един редактор, към който се добавят други приложение/програми за да добие определена функционалност.

Инсталирал съм всичко което е описано на ягарто сайта, сложол съм Zylin.
Но пропуска за проблема е мой, а подсещането за него е твой!
Само думите, че процесора зацикля някъде и не стига до зададения брейкпойнт бяха достатъчни за да прогледна.
Всичко си се флашва както трябва, но както обясних в първия пост че има две части, бутлодер и приложение, аз опитвам да дебъгвам само приложението.
Двете части се компилират отделно и се получават и две отделни парчета код, първо се флашва бутлодера, и след това през УСБ му се прехвърля приложението към флаша.
В еклипс при работа обаче с дебъгера, за момента си мисля, че при флашване JLINK трие процесора и бутлодера, и като запише приложението няма какво да го извика и процесора си цикли някъде и аз чакам реакция.
Адресите с 0xFF.. са на няколко регистъра които GDB инициализира преди дебъгване, инче другите адреси са правилни, но това го виждам в конзолата на GDB Server-а.
Объркването SAM7X смяната съсSAM7S не променя нищо.
Скрипта за инициализация на GDB не е във файл, а е сложен в менюто Command, копиран е от примерни проекти на ягарто сайта.
Разбирам идеята на скриптовете, но всяко нещо стъпка по стъпка.
Реших да ползвам еклипс не заради организацията на проекти, а колкото за да видя дебъгера как работи, за да намеря моя начин да работя с АРМ.
Във проекта никъде няма Main, има само една AppMain и задавам именно с нея да започне дебъгването.
Тъй като проекта, който реших да разучавам за начало е на GCC, варианта да ползвам ИАР в момента не е удобен.

Ще помъча още малко пък може и да се върна само на промпта, там грешка няма.


Нед Авг 29, 2010 7:15 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

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


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

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