|
Перенос EFSL на IAR, помогите ламеру |
|
|
|
Jun 21 2006, 06:12
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Вчера сел переносить efsl с gcc на iar потребность возникла по следующим причинам: 1. Куплена отладочная плата с внутрисхемным эмулятором J-LINK под iar 2. Под IAR больше рабочих примеров 3. Лекарство под RDI так и не было найдено (не очень то и хотелось) 4. Кроме efsl планируется ввести в проект еще кучу всего разного 5. С UCFS разобраться как я понял гораздо сложнее Скачал EFSL для AT91SAM7S64 http://www.siwawi.arubi.uni-kl.de/avr_proj...0404_public.zipНу так вот в принципе все файлы легли кроме двух: interrupt_utils.h interrupt_utils.c ну и как следствие: systime.c Как я понял причина в различной интерпретации ассемблерного кода и макросов двумя компиляторами (если не прав поправьте меня) Так в файле interrupt_utils.h присутствует следующая строка: #define ISR_ENTRY() asm volatile(" sub lr, lr,#4\n" \ " stmfd sp!,{r0-r12,lr}\n" \ " mrs r1, spsr\n" \ " stmfd sp!,{r1}") После которой компилятор затыкается Исправление ее к виду : #define ISR_ENTRY() asm (" sub lr, lr,#4\n" " stmfd sp!,{r0-r12,lr}\n" " mrs r1, spsr\n" " stmfd sp!,{r1}\n") Изменяет вид ошибки но не исправляет ситуацию Там же присутствует строка: #define NACKEDFUNC __attribute__((naked)) Которая так же не проходит в systime.c В interrupt_utils.c есть строка? asm volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ ); Может я чего то не понимаю Может перенести просто невозможно В ассемблере я не специалист как впрочем и в С Если не трудно помогите перевести в IAR Спасибо!!!
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Jun 21 2006, 06:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(e-tarasov @ Jun 21 2006, 09:12)  Вчера сел переносить efsl с gcc на iar Так в файле interrupt_utils.h присутствует следующая строка:
#define ISR_ENTRY() asm volatile(" sub lr, lr,#4\n" \ " stmfd sp!,{r0-r12,lr}\n" \ " mrs r1, spsr\n" \ " stmfd sp!,{r1}")
Там же присутствует строка:
#define NACKEDFUNC __attribute__((naked))
В interrupt_utils.c есть строка?
asm volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ ); Если не трудно помогите перевести в IAR Спасибо!!! Просто в лоб это перевести не получится - у ИАРа нет возможности в С подавить сохранение контекста (нет аналога __naked__) Поэтому придется делать "обертку" в отдельном asm-файле. Что-то типа такого: Код wrapper.s79:
RSEG ICODE:CODE CODE32
EXTERN Handler_body PUBLIC Handler
; Wrapper for the interrupt service routinewrapper.
Handler: sub lr, lr,#4 stmfd sp!,{r0-r12,lr} mrs r1, spsr stmfd sp!,{r1} bl Handler_body ; Call the ISR routine.
И здесь какой-то завершающий код,, обратный ISR_ENTRY()
END соответственно обработчик на с объявить как __arm void HandlerBody(void) но что-то мне подсказывает, что все будет гораздо проще и достаточно будет объявить обработчик как __irq __arm Handler() или __nested __irq __arm Handler(). Если других советов не будет - постараюсь ближе к вечеру скачать исходники и глянуть.
Сообщение отредактировал Сергей Борщ - Jun 21 2006, 06:55
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 21 2006, 07:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата но что-то мне подсказывает, что все будет гораздо проще и достаточно будет объявить обработчик как __irq __arm Handler() или __nested __irq __arm Handler() Согласен. Это ботва с nested нужна для того, что бы обходть проблему со входом в прерывания в gcc. С 95% вероятностью __irq __arm Handler() и есть заменитель sub lr, lr,#4 stmfd sp!,{r0-r12,lr} mrs r1, spsr stmfd sp!,{r1} ...
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jun 21 2006, 09:16
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
__irq __arm Handler() вроде бы прокатило нет возможномти проверить а вот что делать вот с этим
static inline unsigned __get_cpsr(void) { unsigned long retval; asm (" mrs %0, cpsr" : "=r" (retval): /* no inputs */ ); //volatile return retval; }
Я так понял результат функция возвращает через стек IAR исходник не глотает не подскажите Что означает : и что делать с retval Спасибо
Сообщение отредактировал e-tarasov - Jun 21 2006, 09:24
|
|
|
|
|
Jun 21 2006, 09:51
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Я думаю что-то наподобие Код static inline unsigned __get_cpsr(void) { unsigned long retval; asm ("mrs retval, cpsr"); return retval; } Уточните как там в асм передаются переменные. Может нужен подчерк перед именем. А впрочем зачем вам эта функция? Это же используется для сохранения контекста и скорее всего сгенериться само при вызове завершении функции.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jun 21 2006, 10:19
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Не хочет передавать В справке ничего не написано Похоже что никак а в С его передать нельзя?
|
|
|
|
|
Jun 21 2006, 11:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Не хочет передавать В справке ничего не написано Похоже что никак а в С его передать нельзя? А как ругается? Какая ошибка? ЗЫ Может не стоит уходить с gcc? Там на каждый пук компилятора, объемная справка
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jun 22 2006, 05:25
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Спасибо за функции честно говоря не догадался поискать. Цитата И вообще как ИАР находит место, откуда надо компилировать проект? Ведь явно нигде имя CStartup не указывается. А в этом модуле - начало программы, с 0го адреса. Во вкладке Debugger сеавится галочка main Это для того чтобы компиляция начиналась с main Далее во вкладке плагины есть такой Ctack который указывает на CStartup
|
|
|
|
|
Jun 22 2006, 08:13
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Цитата 1 По моему галочка main говорит чтобы дебаггер при запуске выполнил весь код и остановился на main. Или не так? Да извините напортачил. Цитата 2 Чего-то не нашел я Ctack в плагинах (если имеется ввиду планины вкладки дебаггера). У меня версия IAR 4.31 видимо у вас другая иплагин по другому обзавается Насчет дефайнов Вместо systime_isr(void) я объявил функцию __irq __arm void irqHandler(void){ с тем же телом кроме ISR_ENTRY() и ISR_EXIT() а дальше по тексту в одном месте заменил systime_isr( на irqHandler( я так понял это обработчик прерываний Проверить не могу потому что: 1. пока проц почему то не прошивается 2. не собрана схема с карточкой Честно говоря меня берут смутные сомнения по поводу успеха этого мероприятия
|
|
|
|
|
Jun 22 2006, 09:04
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(e-tarasov @ Jun 22 2006, 11:13)  Насчет дефайнов Вместо systime_isr(void) я объявил функцию __irq __arm void irqHandler(void){ с тем же телом кроме ISR_ENTRY() и ISR_EXIT() Это правильно, только можно было имя не менять: __arm __irq void systime_isr(void). Тогда бы не пришлось: Цитата а дальше по тексту в одном месте заменил systime_isr( на irqHandler( В общем я пришел к тому же результату. Прилагаю архив с файлами interrupt_utils.h и systime.c. с этим intrrupt_utils.h файл interrupt_utils.c из проекта надо выкинуть.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 22 2006, 10:45
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
От отчаяния скачал ГЦЦ скомпилил Все пошло без проблем Может перейти на ГЦЦ В IAR пока не идет программирование из-за скорее всего тех самых Cstartup или xls Буду пробовать дальше
|
|
|
|
|
Jun 22 2006, 10:47
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SlavaCh @ Jun 22 2006, 13:10)  Сергей, у вас заработала ESFL? Нет,я не пытался ее собрать до конца. Цитата Я сделал примерно то же самое, но в целом понимаю, что надо как то приклеить к проекту файл startup_SAM7S.S(из исходников esfl) но не знаю как. 1) Просто добавить его в список файлов 2)Изменить расширение на принятое у IAR .s79. 3)Переписать его заново ибо ассемблеры совсем не похожи. Цитата Это к тому же вопросу о стандартных файлах Cstartup в примерах ИАРА. Возможно в примерах они и нужны, но я без крайней необходимости cstartup не трогаю. Поэтому по умолчанию подлинковывается уже готовый из библиотеки. Сейчас глянул этот .S: Я бы код начиная с метки Reset_Handler по комментарий // Setup Stack for each mode (инициализация периферии) перенес бы на С в начало main или в функцию __low_level_init(), а все остальное делает стандартный IARовский cstartup который подлинковывается из библиотеки. Цитата И что-то типа файла линковки тоже ведь надо? (в примерах это .xls) Или я чего-то не понимаю??? Объясните плиз.. Да, надо. Так возьмите его из примера и подключите к проекту.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 23 2006, 06:31
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Удалось все таки скомпилить EFSL под IAR кому интересно могу выложить проект спасибо Сергею Файлы cstartup и *.xls взял стандартные Скомпилил проект под GCC. Собрал схему с картой SD. Есть возможность сравнить компиляторы GCC иIAR Пишите может предложите какой-либо тест.
|
|
|
|
|
Jun 23 2006, 07:32
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(e-tarasov @ Jun 23 2006, 10:31)  Удалось все таки скомпилить EFSL под IAR кому интересно могу выложить проект спасибо Сергею Файлы cstartup и *.xls взял стандартные Скомпилил проект под GCC. Собрал схему с картой SD. Есть возможность сравнить компиляторы GCC иIAR Пишите может предложите какой-либо тест. Интересно. Выкладывайте. Как раз есть под рукой EB40A c AT91R40008 и слот для карточки. А IAR вы какой пользовали? Я запустил последний, 4.40а. После рихтовки стартапа и линкерного файла работает на "ура".
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Jun 23 2006, 08:28
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 26-01-05
Пользователь №: 2 200

|
Выложите плиз. или пошлите на мыло slava()trace()ru А у меня чего-то Jlink не шьет проц - выдает варнинги (there were warnings during download...) хотя файлы подключил рабочие  Может там в настройках есть волшебная галка какая-нибудь???
|
|
|
|
|
Jun 23 2006, 11:19
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Прошу прощения запарился я конкретно с ентим ГЦЦ и ИАР проект запускается в режиме debug после ресета не фурычит а может и фурычило но что то изменил не подумавши может кто подскажет почему такое происходит может быть из-за s79
|
|
|
|
|
Jun 23 2006, 13:20
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(e-tarasov @ Jun 23 2006, 14:19)  может кто подскажет почему такое происходит может быть из-за s79 Да выкинь его вообще из проекта. Он подлинкуется из библиотеки. P.S. у нас праздники, до понедельника на природу уезжаю, если до понедельника не разберешься - пиши мылом, постараюсь помочь.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 27 2006, 11:24
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Ну наконец таки добил проект Дело как говорится было не в бабине s79 был абсолютно не причем Удалось сравнить скорости чтения/записи На одной и той же карте при использовании бенчмарка из проекта ГЦЦ и IAR в показали почти одинаковые результаты ГЦЦ 315/143 IAR 292/133 Спасибо всем за помощь в переводе!!!
|
|
|
|
|
Jun 29 2006, 04:14
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Всем привет. Извините за отсутствие. Пришлось смотаться в коммандировку. Как пишет SlavaCh строку __irq __arm void systime_isr(void пришлось выкинуть и заменить на стандартное прерывание от PIT кроме того пришлось подправить функцию systime_get(void) путем вставки команд AT91F_disable_interrupt(); AT91F_enable_interrupt(); которые прописаны в ассемблерном файле *.s79. Проект сырой много лишнего надо чистить а лень как нибудь займусь. Карточки у меня все SD и на всех разные скорости самая маленькая у 16Мб 28/315 Пробую соединить UCOS и EFSL Напишите может кто то пробовал Спасибо!!!
|
|
|
|
|
Jul 5 2006, 07:03
|
Знающий
   
Группа: Свой
Сообщений: 858
Регистрация: 9-08-04
Пользователь №: 473

|
Цитата(e-tarasov @ Jun 29 2006, 08:14)  Всем привет. Извините за отсутствие. Пришлось смотаться в коммандировку. Как пишет SlavaCh строку __irq __arm void systime_isr(void пришлось выкинуть и заменить на стандартное прерывание от PIT кроме того пришлось подправить функцию systime_get(void) путем вставки команд AT91F_disable_interrupt(); AT91F_enable_interrupt(); которые прописаны в ассемблерном файле *.s79. Проект сырой много лишнего надо чистить а лень как нибудь займусь. Карточки у меня все SD и на всех разные скорости самая маленькая у 16Мб 28/315 Пробую соединить UCOS и EFSL Напишите может кто то пробовал Спасибо!!! поскольку сидим на кейл то RTXARM+EFSL работает скорость (пока тренируемся) 133 запись 266 чтение будем разбираться со скоростями так как запись во флеш идет на 15 мгц и скорость теряется гдето внутри файловой системы
|
|
|
|
|
Jul 6 2006, 06:08
|
Знающий
   
Группа: Свой
Сообщений: 858
Регистрация: 9-08-04
Пользователь №: 473

|
я как всегда не по теме но в общем ключе собрали RTXARM 3 + EFSL (все под кейл на демоборде MCP2140) работает параллельно 2 потока ииз этих разных потоков пишем и читаем одновремнно в разные файлы и по ходу дела мигаем диодами( ну какой эмбеддер без мигания диода  ) исправили ошибку в дате времени которая была в архиве приведенном выше вроде все работает системные издержки незаметны скорости пока остались прежние будем посмотреть потом если интересно могу выложить архивчик проекта сборки под кейл или завести новую тему elfs+rtxarm под кейлом на LPC2148 ? или не нужно это?
|
|
|
|
|
Jul 7 2006, 04:51
|
Участник

Группа: Свой
Сообщений: 44
Регистрация: 30-05-06
Пользователь №: 17 578

|
Выкладываю проект EFSL под IAR для AT91SAM7S64 Мне удалось присоединить его (с некоторыми изменениями , конечно) к UCOS там же тусит USB masstorage+FS от атмела в связи с чем прошу помощи. У кого нибудь есть рабочие проги для чтения файлов из МК для USB masstorage+FS функция BFSA_read("FILE.TXT",&buffer,i,k) работает некорректно, т. е. вообще не работает. Спасибо!!!
|
|
|
|
|
Jan 30 2008, 13:18
|
Группа: Участник
Сообщений: 12
Регистрация: 30-01-08
Пользователь №: 34 586

|
ESFL то под IARэом работает уже давно,кому надо - могу кинуть на мыло...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|