реклама на сайте
подробности

 
 
> GCC и прерывания в C коде, __attribute__ ((interrupt ("IRQ"))) и уровни оптимизации
Alex03
сообщение Oct 3 2006, 04:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Вчера понадобилать Release версия проекта, скомпилил, ни в какую работать не захотела, глючило всё как могло.
Пол дня убил пока не понял что наступил на известные грабли GCC, неправильное генерение пролога/эпилога для прерываний. Описанные тут и тут


Всё это под CW 1.6 b 3. там GCC 4.1.0.

Притом на сайте Rowley Associates примерно тут (сейчас чтото недоступен) говорится что с уровнем оптимизации 1 ( -O1 ) всё ОК! Но как я понял это в предыдущих версиях (3.х.х) оно работало, а сейчас нет.


Вооот. Качать кучу исходников и патчить их чтото не хочется, мож кто уже проделал сию работу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
PrSt
сообщение Oct 4 2006, 06:12
Сообщение #2


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(Alex03 @ Oct 3 2006, 07:50) *
Вооот. Качать кучу исходников и патчить их чтото не хочется, мож кто уже проделал сию работу?

PR16634: Wrong-code for IRQ functions. - http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00230.html
When generating interworked armv4t code gcc generates incorrect function
epilogue code for IRQ/FIQ functions. ...


--------------------
Go to the top of the page
 
+Quote Post
Alex03
сообщение Oct 4 2006, 07:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(PrSt @ Oct 4 2006, 12:12) *
PR16634: Wrong-code for IRQ functions. - http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00230.html
When generating interworked armv4t code gcc generates incorrect function
epilogue code for IRQ/FIQ functions. ...


Так я практически тудаже ссылку дал. Т.е. в конце страницы которую я обозвал как второй "тут" (т.е. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16634) эта ссылка есть. И я понятно там был.
Мне не хочется качать исходники GCC, патчить, компилять.

Кстати вопрос к знающим, а сам GCC под ARM компилять надо обязательно GCC-x86 (а то и со всякими бинутилами и т.д.)?
Или можно и в MS VC 2003? smile.gif
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 4 2006, 18:43
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Alex03 @ Oct 4 2006, 11:05) *
Кстати вопрос к знающим, а сам GCC под ARM компилять надо обязательно GCC-x86 (а то и со всякими бинутилами и т.д.)?
Или можно и в MS VC 2003? smile.gif

Попробуйте взять мою сборку 4.1.2 http://www.klen.org/Projects/Embeded-gnu-t...last_build.html
В нем arm.c изменен в части касающей строк которык в патче указаны.
Если будете пробывать напишите че вышло. будем разбиратся.

Сообщение отредактировал klen - Oct 4 2006, 18:58
Go to the top of the page
 
+Quote Post
Alex03
сообщение Oct 5 2006, 04:24
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(klen @ Oct 5 2006, 00:43) *
Попробуйте взять мою сборку 4.1.2 http://www.klen.org/Projects/Embeded-gnu-t...last_build.html
В нем arm.c изменен в части касающей строк которык в патче указаны.
Если будете пробывать напишите че вышло. будем разбиратся.


Спасибо, но не прокатило.

С код

Код
void testISR(void) __attribute__ ((interrupt ("IRQ")));
void testISR(void)
{
    testIsrFn();
}


Код который генерился ранее, т.е. GCC 4.1.0 с оптимизацией Level 1
Код
       E24EE004   sub lr, lr, #0x00000004
       E92D500F   stmfd sp!, {r0-r3, r12, lr}
       EBFFFFFE   bl 0x000000a4                       // testIsrFn()
       E8BD500F   ldmfd sp!, {r0-r3, r12, lr}
       E25EF004   subs pc, lr, #0x00000004


Код который генерится с GCC 4.1.2 с оптимизацией Level 1
Код
       E24EE004   sub lr, lr, #0x00000004
       E92D500F   stmfd sp!, {r0-r3, r12, lr}
       EBFFFFFE   bl 0x000000b0                       // testIsrFn()
       E8BD500F   ldmfd sp!, {r0-r3, r12, lr}
       E25EF004   subs pc, lr, #0x00000004
}

Т.е. тоже самое, там проблема что 4 из lr дважды вычитается.


Рабочий код который генерится с обоими GCC без оптимизации (дебаг)
Код
       E52DC004   str r12, [sp, #-0x004]!
       E1A0C00D   mov r12, sp
       E92DD80F   stmfd sp!, {r0-r3, r11-r12, lr-pc}
       E24CB004   sub r11, r12, #0x00000004
       EBFFFFFE   bl 0x00000010                       // testIsrFn()
       E24BD01C   sub sp, r11, #0x0000001c
       E89D680F   ldmfd sp, {r0-r3, r11, sp-lr}
       E8BD1000   ldmfd sp!, {r12}
       E25EF004   subs pc, lr, #0x00000004

С ключиком -mapcs-frame код генерится как в дебаге.


Ну и на вот это не ответишь?
Цитата(Alex03 @ Oct 4 2006, 11:05) *
Кстати вопрос к знающим, а сам GCC под ARM компилять надо обязательно GCC-x86 (а то и со всякими бинутилами и т.д.)?
Или можно и в MS VC 2003? smile.gif


И ещё klen почему твои бинарники раза в 3 больше чем которые с crossworks-ом? Мож их стрипом?

Кстати статус у патча нифига не CLOSED.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex03   GCC и прерывания в C коде   Oct 3 2006, 04:50
|- - shhh   По поводу глюка - я правильно понял что он проявля...   Oct 5 2006, 06:33
|- - Alex03   Цитата(shhh @ Oct 5 2006, 12:33) По повод...   Oct 5 2006, 10:00
|- - yaghtn   Случайно наткнулся: http://www.armkits.com/support...   Oct 5 2006, 10:04
|- - Alex03   Цитата(yaghtn @ Oct 5 2006, 16:04) Случай...   Oct 5 2006, 11:25
|- - klen   Цитата(yaghtn @ Oct 5 2006, 14:04) Вкраце...   Oct 7 2006, 17:59
|- - klen   Убил субботу, ночь и полсегодня в поисках кривизны...   Oct 8 2006, 14:26
|- - Alex03   Цитата(klen @ Oct 8 2006, 20:26) ... SKIP...   Oct 9 2006, 05:01
- - klen   Ну че? потестируете?   Oct 9 2006, 05:42
|- - Alex03   Цитата(klen @ Oct 9 2006, 11:42) Ну че? п...   Oct 9 2006, 08:22
|- - klen   я еще не выложил. завтра постатаюсь с утра закачат...   Oct 9 2006, 13:23
|- - klen   Цитата(Alex03 @ Oct 9 2006, 12:22) Если т...   Oct 11 2006, 20:47
|- - Alex03   Цитата(klen @ Oct 12 2006, 02:47) Выклады...   Oct 12 2006, 03:40
|- - klen   А как сюда архив выложить в 4 мега. Не дает.   Oct 12 2006, 12:58
|- - klen   Наконецто FTP заработало!!! http:/...   Oct 12 2006, 15:54
|- - Alex03   Цитата(klen @ Oct 12 2006, 18:58) А как с...   Oct 13 2006, 06:03
|- - klen   1.ЦитатаПопроситесь в группу "свои" и Ва...   Oct 13 2006, 10:22
|- - Alex03   Цитата(klen @ Oct 13 2006, 16:22) 1.Цитат...   Oct 17 2006, 03:47
- - klen   ЦитатаЯ только IRQ и только в ARM пользую. Вроде р...   Oct 17 2006, 09:23
- - dimka76   Подниму старую тему. Вот прошло четыре года, а ка...   Sep 28 2010, 05:05
|- - Сергей Борщ   Цитата(dimka76 @ Sep 28 2010, 08:05) Вот ...   Sep 28 2010, 08:41
|- - dimka76   А как дела обстоят у Sourcery G++. Хотя и у них п...   Sep 28 2010, 10:52
|- - IgorKossak   Цитата(dimka76 @ Sep 28 2010, 13:52) А ка...   Sep 28 2010, 11:51
- - GetSmart   а самому проверить не судьба...   Sep 28 2010, 11:06
|- - dimka76   Цитата(GetSmart @ Sep 28 2010, 15:06) а с...   Sep 28 2010, 11:15
- - dimka76   Всем большое спасибо )))   Sep 28 2010, 12:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 14:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016