|
Keil RV3.50 и FIQ, error: #130: expected a "{" |
|
|
|
Jun 10 2009, 07:20
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Други! Выручайте! Зациклился. Пытаюсь реализовать обработку FIQ прерываний как описано http://www.keil.com/support/man/docs/ca/ca_le_fiq.htm. Но при компиляции выдаёт ошибку error: #130: expected a "{". Хотя реально никакой синтаксической ошибки нет! Может кто сталкивался?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 27)
|
Jun 10 2009, 07:44
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Ничего не понимаю! Я ж на сайте кейла хелп смотрел!!!
В двух словах что делаю. 1. Файл Startup.s - импортирую имя C-шной функции: IMPORT MyFIQ_Handler - указываю переход на эту функцию: ... FIQ_Handler B MyFIQ_Handler ... 2. В файле проекта, например, Application.c, реализую эту функцию: void MyFIQ_Handler(void) __fiq { /* Чего-то делается */ }
Где ошибка?
|
|
|
|
|
Jun 10 2009, 08:05
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Цитата(GetSmart @ Jun 10 2009, 11:56)  Приведите точный текст своего обработчика. Вообще-то это даже и не важно! Ошибка выдаётся даже вот с таким текстом: void MyFIQ_Handler(void) __fiq { } Если аттрибут __fiq переместить в начало определения функции, то выдаётся другая синтаксическая ошибка. С атрибутом __irq такой ерунды не происходит куда бы его не поставить! Он всегда воспринимается правильно.
|
|
|
|
|
Jun 10 2009, 08:19
|
Группа: Новичок
Сообщений: 11
Регистрация: 21-03-05
Пользователь №: 3 555

|
Цитата(AlexanderPo @ Jun 10 2009, 12:05)  Вообще-то это даже и не важно! Ошибка выдаётся даже вот с таким текстом:
void MyFIQ_Handler(void) __fiq { }
Если аттрибут __fiq переместить в начало определения функции, то выдаётся другая синтаксическая ошибка. С атрибутом __irq такой ерунды не происходит куда бы его не поставить! Он всегда воспринимается правильно. Если используется компилятор RealView, то там __fiq нет.
|
|
|
|
|
Jun 10 2009, 08:27
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Цитата(AjaxLab @ Jun 10 2009, 12:19)  Если используется компилятор RealView, то там __fiq нет. Поясните, пожайлуйста, а как тогда реализовать FIQ? Действительно, если всё оставить как есть и только убрать __fiq, то всё начинает компилится, НО! Программа вылетает, кажется, в Undefined Mode! Я предполагал, что именно атрибут __fiq обеспечивает правильное сохранение/восстановление регистров. В частности, PC.
|
|
|
|
|
Jun 10 2009, 08:45
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Цитата(aaarrr @ Jun 10 2009, 12:36)  Напишите __irq - будет работать. Если хотите использовать преимущества дополнительного банка регистров, пишите обработчик FIQ на асме. То есть реализовать FIQ на С в кейле невозможно? Вот это да! Вот тебе и хвалёный на всех семинарах кейл! А чего же в хелпе это не отражено?
|
|
|
|
|
Jun 10 2009, 08:48
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369

|
У тебя с стартапе так релизовано? Код Vectors LDR PC,Reset_Addr LDR PC,Undef_Addr LDR PC,SWI_Addr LDR PC,PAbt_Addr LDR PC,DAbt_Addr NOP ; Reserved Vector ; LDR PC,IRQ_Addr LDR PC,[PC,#-0xF20] ; Vector From AIC_IVR ; LDR PC,FIQ_Addr LDR PC,[PC,#-0xF20] ; Vector From AIC_FVR
Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler Какой проц используешь?
Сообщение отредактировал Sanya_kv - Jun 10 2009, 08:49
|
|
|
|
|
Jun 10 2009, 08:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(AlexanderPo @ Jun 10 2009, 12:45)  То есть реализовать FIQ на С в кейле невозможно? Вот это да! Вот тебе и хвалёный на всех семинарах кейл! Почему невозможно-то? Возможно, просто не так эффективно будет. Цитата(AlexanderPo @ Jun 10 2009, 12:45)  А чего же в хелпе это не отражено? Потому что Вы читаете хелп не от того компилятора. Цитата(GetSmart @ Jun 10 2009, 12:46)  А разумное объяснение у них есть?! А зачем тут что-то объяснять? Они вполне разумно решили, что пользователю лучше самому разобраться с банком FIQ, если оно ему надо. А если не надо, то можно использовать __irq. Цитата(Sanya_kv @ Jun 10 2009, 12:48)  У тебя с стартапе так релизовано? ... Какой проц используешь? Ну и к чему все это?
|
|
|
|
|
Jun 10 2009, 09:02
|
Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132

|
Осталось только раздражение на кейл! Зачем же комплектовать IDE старым хелпом. Там тоже описан атрибут __fiq. Не буду переходить с IAR на Keil
Сообщение отредактировал AlexanderPo - Jun 10 2009, 09:18
|
|
|
|
|
Jun 10 2009, 09:08
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(AlexanderPo @ Jun 10 2009, 13:02)  И как просто, не зарываясь в asm, реализовать обработку FIQ непонятно... Да почему непонятно? Зачем зарываться в асм? Цитата(GetSmart @ Jun 10 2009, 13:03)  Глупость да и только. Никаких сложностей __fiq не требовал. Кроме этого раньше была аналогичная глупость с вложенными прерываниями. Браво, Кейл! Глупость - использовать модификатор __fiq не вдаваясь в подробности, дескать, компилятор все сделает. Максимум, что он может - это сократить сохранение/восстановление контекста, человек способен придумать более разумное использование банка.
|
|
|
|
|
Jun 10 2009, 09:36
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(GetSmart @ Jun 10 2009, 13:11)  Это законное удобство, на которое расчитывает юзер компилятора. Да, хотя бы не сохранять 4 регистра, уже экономия. Удобства и экономии на 3 копейки, при заметном усложнении компилятора (типа, тут используем вместо R0-R3 R8-R11, но если есть вызов вложенных процедур, то используем R8-R11 для сохранения R0-R3, и все это ради одного обработчика). Цитата(GetSmart @ Jun 10 2009, 13:11)  Какой человек? Что придумать? Ну, если думать некому, то можно просто писать __irq - проигрыш от лишних сохранений затереятся на фоне других "изысков".
|
|
|
|
|
Jun 12 2009, 01:40
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(GetSmart @ Jun 10 2009, 12:03)  Глупость да и только. Никаких сложностей __fiq не требовал. Кроме этого раньше была аналогичная глупость с вложенными прерываниями. Браво, Кейл! Ну а причем тут Keil? У Keil'овского компилятора как раз __fiq атрибут поддерживается. Браво адресуйте непосредственно ARM-LTD, т.к. RVCT это их творение. Цитата(GetSmart @ Jun 10 2009, 12:11)  Это законное удобство, на которое расчитывает юзер компилятора. А чем неудобно вместо нескольких бестолковых и нестандартных атрибутов, пользовать вообще без атрибуетов, или по крайней мере сократить их количество до одного?
|
|
|
|
|
Jun 12 2009, 05:48
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Jun 12 2009, 04:40)  А чем неудобно вместо нескольких бестолковых и нестандартных атрибутов, пользовать вообще без атрибуетов, или по крайней мере сократить их количество до одного? Ну-ну  а зачем еще, например, компилятору несколько разных бестолковых ключей оптимизации, пользовать вообще без оптимизации, или по крайней мере сократить их количество до одого?  Цитата(aaarrr @ Jun 10 2009, 12:36)  Ну, если думать некому, то можно просто писать __irq - проигрыш от лишних сохранений затереятся на фоне других "изысков". Или не затеряется. В то,что среднестатический программист способен бездумно испохабить многое - верю. Только это не значит, что по этой "причине" можно делать упрощенные компиляторы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 13 2009, 02:05
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Jun 12 2009, 08:48)  Ну-ну  а зачем еще, например, компилятору несколько разных бестолковых ключей оптимизации, пользовать вообще без оптимизации, или по крайней мере сократить их количество до одого?  И правда зачем? Вы когда-нибудь реально использовали те ключики, которые находятся между, образно говоря, "без оптимизации" и "максимальная оптимизация"? Возвращаясь к теме - некий магический атрибут __fiq, который якобы сделает все максимально быстро и эффективно, на самом деле ничего не сделает, - не догадается компилер хранить static переменные в регистрах FIQ банка... Отсутствие __fiq в RVCT дисциплинирует, и еще раз заставит задуматься нужен ли там __FAST__ IRQ. Если нужен - Asm в руки и делаем настоящий FAST. А если не нужен (FIQ используется просто как более приоритетный IRQ) то чем __irq атрибут не устраивает?
|
|
|
|
|
Jun 13 2009, 10:49
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369

|
Цитата(defunct @ Jun 13 2009, 06:05)  Отсутствие __fiq в RVCT дисциплинирует, и еще раз заставит задуматься нужен ли там __FAST__ IRQ. Если нужен - Asm в руки и делаем настоящий FAST. А если не нужен (FIQ используется просто как более приоритетный IRQ) то чем __irq атрибут не устраивает? Зачем тогда С компилятор нужен. На Asm всю прогу писать "Надёжней", "Качественней", сроки реализации "Немногим" медленнее, отладка совсем чуть-чуть, а главное программа выполняется быстрей (иногда), ... . Я согласен, что разработчики компилятора не боги, но и компилятор стоит не дешёво (хотя для кого как и где). В данном примере действительно правильней реализовать на АSМ, из-за недостатка среды разработки. Зачем брать автомобиль, который иногда приходится толкать?
Сообщение отредактировал Sanya_kv - Jun 13 2009, 10:59
|
|
|
|
|
Jun 13 2009, 11:33
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Jun 13 2009, 05:05)  И правда зачем? Вы когда-нибудь реально использовали те ключики, которые находятся между, образно говоря, "без оптимизации" и "максимальная оптимизация"? Поминаемые Вами ключики таковыми собственно не являются - это готовые наборы из других ключей. Теми, индивидуальными - пользуюсь, не ежедневно, но несомненно пользуюсь и не только в пределах проекта или отдельного файла, но и наиболее часто для отдельных кусков исходника. Это достаточно не сложно и проще, нежели преписывать куски кода на том-же ASM Цитата Возвращаясь к теме - некий магический атрибут __fiq, который якобы сделает все максимально быстро и эффективно, на самом деле ничего не сделает, - не догадается компилер хранить static переменные в регистрах FIQ банка... Я не специалист по магии (и уж тем более не жду никаих чудес от компилятора )поэтому мне совершенно достато того, что я знаю, комплятор может сделать. Цитата Отсутствие __fiq в RVCT дисциплинирует, и еще раз заставит задуматься нужен ли там __FAST__ IRQ. Я, считаю, что я способен думать и без таких заботливых "подсказок". Цитата Если нужен - Asm в руки и делаем настоящий FAST. Если нужно выжать по максимуму я и сам напишу его обработчик на ASM в startup прямо с адреса 0x1C. Если нужно будет написать развеситый обработчик FIQ (есть у меня и такие на многие килобайты), то __fiq мне в этом, как минимум ну СОВСЕМ ничем не помешает. Ну а если просто какой-то средненький о сотню байт, то я предпочту писать на 'C' ( естественно осознавая, что потери, нежели мне вдруг с бодуна придет мысль о вызове, например, функций из обработчика, будут малосовметимыми со скоростью), нежели на ASM благодаря "заботе" об излечении от каких-то якобы имеющихся у пользователей "иллюзий".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|