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

 
 
> Keil RV3.50 и FIQ, error: #130: expected a "{"
AlexanderPo
сообщение Jun 10 2009, 07:20
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132



Други! Выручайте! Зациклился. Пытаюсь реализовать обработку FIQ прерываний как описано http://www.keil.com/support/man/docs/ca/ca_le_fiq.htm. Но при компиляции выдаёт ошибку error: #130: expected a "{". Хотя реально никакой синтаксической ошибки нет! Может кто сталкивался?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 27)
GetSmart
сообщение Jun 10 2009, 07:26
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



У разных компилеров свой синтаксис атрибутов процедур. Вероятно тот пример не для кейла. Вероятнее всего нужно изменить заголовок процедуры под кейл. Читайте хелп на кейл.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AlexanderPo
сообщение Jun 10 2009, 07:44
Сообщение #3





Группа: Новичок
Сообщений: 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
{
/* Чего-то делается */
}

Где ошибка?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 10 2009, 07:56
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(AlexanderPo @ Jun 10 2009, 12:44) *
Ничего не понимаю! Я ж на сайте кейла хелп смотрел!!!

Точно. Я и не заметил что сайт кейла biggrin.gif
Просто когда выдаётся ошибка '{' expected - это означает, что встретилось что-то ненужное вроде атрибута __fiq там, где он не нужен. В ИАРе этот атрибут ставится перед заголовком процедуры, если поставить после то ИАР тоже ругается.

Сообщение отредактировал GetSmart - Jun 10 2009, 08:03


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AlexanderPo
сообщение Jun 10 2009, 08:05
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132



Цитата(GetSmart @ Jun 10 2009, 11:56) *
Приведите точный текст своего обработчика.


Вообще-то это даже и не важно! Ошибка выдаётся даже вот с таким текстом:

void MyFIQ_Handler(void) __fiq
{
}

Если аттрибут __fiq переместить в начало определения функции, то выдаётся другая синтаксическая ошибка. С атрибутом __irq такой ерунды не происходит куда бы его не поставить! Он всегда воспринимается правильно.
Go to the top of the page
 
+Quote Post
AjaxLab
сообщение Jun 10 2009, 08:19
Сообщение #6





Группа: Новичок
Сообщений: 11
Регистрация: 21-03-05
Пользователь №: 3 555



Цитата(AlexanderPo @ Jun 10 2009, 12:05) *
Вообще-то это даже и не важно! Ошибка выдаётся даже вот с таким текстом:

void MyFIQ_Handler(void) __fiq
{
}

Если аттрибут __fiq переместить в начало определения функции, то выдаётся другая синтаксическая ошибка. С атрибутом __irq такой ерунды не происходит куда бы его не поставить! Он всегда воспринимается правильно.


Если используется компилятор RealView, то там __fiq нет.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2009, 08:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Атрибут __fiq кончился вместе с компилятором CARM. У RVCT есть только __irq.
Go to the top of the page
 
+Quote Post
AlexanderPo
сообщение Jun 10 2009, 08:27
Сообщение #8





Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132



Цитата(AjaxLab @ Jun 10 2009, 12:19) *
Если используется компилятор RealView, то там __fiq нет.


Поясните, пожайлуйста, а как тогда реализовать FIQ?
Действительно, если всё оставить как есть и только убрать __fiq, то всё начинает компилится, НО! Программа вылетает, кажется, в Undefined Mode! Я предполагал, что именно атрибут __fiq обеспечивает правильное сохранение/восстановление регистров. В частности, PC.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2009, 08:36
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Напишите __irq - будет работать. Если хотите использовать преимущества дополнительного банка регистров, пишите обработчик FIQ на асме.
Go to the top of the page
 
+Quote Post
AlexanderPo
сообщение Jun 10 2009, 08:45
Сообщение #10





Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132



Цитата(aaarrr @ Jun 10 2009, 12:36) *
Напишите __irq - будет работать. Если хотите использовать преимущества дополнительного банка регистров, пишите обработчик FIQ на асме.


То есть реализовать FIQ на С в кейле невозможно? Вот это да! Вот тебе и хвалёный на всех семинарах кейл! А чего же в хелпе это не отражено?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 10 2009, 08:46
Сообщение #11


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Jun 10 2009, 13:20) *
Атрибут __fiq кончился вместе с компилятором CARM. У RVCT есть только __irq.

А разумное объяснение у них есть?!


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 10 2009, 08:48
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2009, 08:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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) *
У тебя с стартапе так релизовано?
...
Какой проц используешь?

Ну и к чему все это?
Go to the top of the page
 
+Quote Post
AlexanderPo
сообщение Jun 10 2009, 09:02
Сообщение #14





Группа: Новичок
Сообщений: 6
Регистрация: 27-07-05
Пользователь №: 7 132



Осталось только раздражение на кейл! Зачем же комплектовать IDE старым хелпом. Там тоже описан атрибут __fiq. Не буду переходить с IAR на Keil rolleyes.gif

Сообщение отредактировал AlexanderPo - Jun 10 2009, 09:18
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 10 2009, 09:03
Сообщение #15


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Jun 10 2009, 13:53) *
А зачем тут что-то объяснять? Они вполне разумно решили, что пользователю лучше самому разобраться с банком FIQ, если оно ему надо. А если не надо, то можно использовать __irq.

Глупость да и только. Никаких сложностей __fiq не требовал. Кроме этого раньше была аналогичная глупость с вложенными прерываниями. Браво, Кейл!


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2009, 09:08
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexanderPo @ Jun 10 2009, 13:02) *
И как просто, не зарываясь в asm, реализовать обработку FIQ непонятно...

Да почему непонятно? Зачем зарываться в асм?

Цитата(GetSmart @ Jun 10 2009, 13:03) *
Глупость да и только. Никаких сложностей __fiq не требовал. Кроме этого раньше была аналогичная глупость с вложенными прерываниями. Браво, Кейл!

Глупость - использовать модификатор __fiq не вдаваясь в подробности, дескать, компилятор все сделает. Максимум, что он может - это сократить сохранение/восстановление контекста, человек способен придумать более разумное использование банка.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 10 2009, 09:11
Сообщение #17


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Jun 10 2009, 14:08) *
Глупость - использовать модификатор __fiq не вдаваясь в подробности, дескать, компилятор все сделает. Максимум, что он может - это сократить сохранение/восстановление контекста, человек способен придумать более разумное использование банка.

Это законное удобство, на которое расчитывает юзер компилятора. Да, хотя бы не сохранять 4 регистра, уже экономия.
Какой человек? Что придумать?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 10 2009, 09:19
Сообщение #18


Частый гость
**

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



Вместо __fiq поставь __irq. Проверенно работает. Толко вход в фунцию рекомендую писать на ассемблере.

Сообщение отредактировал Sanya_kv - Jun 10 2009, 09:23
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 10 2009, 09:36
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 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 - проигрыш от лишних сохранений затереятся на фоне других "изысков".
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 12 2009, 01:40
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 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) *
Это законное удобство, на которое расчитывает юзер компилятора.

А чем неудобно вместо нескольких бестолковых и нестандартных атрибутов, пользовать вообще без атрибуетов, или по крайней мере сократить их количество до одного?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 12 2009, 05:48
Сообщение #21


Гуру
******

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



Цитата(defunct @ Jun 12 2009, 04:40) *
А чем неудобно вместо нескольких бестолковых и нестандартных атрибутов, пользовать вообще без атрибуетов, или по крайней мере сократить их количество до одного?

Ну-ну sad.gif sad.gif а зачем еще, например, компилятору несколько разных бестолковых ключей оптимизации, пользовать вообще без оптимизации, или по крайней мере сократить их количество до одого? smile.gif


Цитата(aaarrr @ Jun 10 2009, 12:36) *
Ну, если думать некому, то можно просто писать __irq - проигрыш от лишних сохранений затереятся на фоне других "изысков".

Или не затеряется. В то,что среднестатический программист способен бездумно испохабить многое - верю. Только это не значит, что по этой "причине" можно делать упрощенные компиляторы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 12 2009, 08:51
Сообщение #22


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Да, интересно, что ответили бы разрабы RealView на вопрос об отсутствии обёртки для FIQ...
Лидеры, млин, в, так сказать, компилеростроении laughing.gif

ЗЫ: хорошо жить на свете с кортексом, никаких заморочек с обёртками cool.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 13 2009, 02:05
Сообщение #23


кекс
******

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



Цитата(zltigo @ Jun 12 2009, 08:48) *
Ну-ну sad.gif sad.gif а зачем еще, например, компилятору несколько разных бестолковых ключей оптимизации, пользовать вообще без оптимизации, или по крайней мере сократить их количество до одого? smile.gif

И правда зачем? Вы когда-нибудь реально использовали те ключики, которые находятся между, образно говоря, "без оптимизации" и "максимальная оптимизация"?

Возвращаясь к теме - некий магический атрибут __fiq, который якобы сделает все максимально быстро и эффективно, на самом деле ничего не сделает, - не догадается компилер хранить static переменные в регистрах FIQ банка...
Отсутствие __fiq в RVCT дисциплинирует, и еще раз заставит задуматься нужен ли там __FAST__ IRQ. Если нужен - Asm в руки и делаем настоящий FAST. А если не нужен (FIQ используется просто как более приоритетный IRQ) то чем __irq атрибут не устраивает?
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 13 2009, 10:49
Сообщение #24


Частый гость
**

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



Цитата(defunct @ Jun 13 2009, 06:05) *
Отсутствие __fiq в RVCT дисциплинирует, и еще раз заставит задуматься нужен ли там __FAST__ IRQ. Если нужен - Asm в руки и делаем настоящий FAST. А если не нужен (FIQ используется просто как более приоритетный IRQ) то чем __irq атрибут не устраивает?


Зачем тогда С компилятор нужен. На Asm всю прогу писать "Надёжней", "Качественней", сроки реализации "Немногим" медленнее, отладка совсем чуть-чуть, а главное программа выполняется быстрей (иногда), ... . Я согласен, что разработчики компилятора не боги, но и компилятор стоит не дешёво (хотя для кого как и где).
В данном примере действительно правильней реализовать на АSМ, из-за недостатка среды разработки.
Зачем брать автомобиль, который иногда приходится толкать? glare.gif

Сообщение отредактировал Sanya_kv - Jun 13 2009, 10:59
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 13 2009, 10:54
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



С тем же успехом можно возмущаться, что не предусмотрены атрибуты для режимов abort и не встроен обработчик swi. Сколько у Вас FIQ в программе? Я почему-то думаю, что от 0 до 1.
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 13 2009, 11:04
Сообщение #26


Частый гость
**

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



Один. Программно интерфейс пришлось реализовать. А с __swi все в порядке, использую довольно часто. В обще использую Keil только из-за OS, и некоторых удобств в разработке. Последние время больше симпатизирую IAR.

Сообщение отредактировал Sanya_kv - Jun 13 2009, 11:07
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 13 2009, 11:09
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sanya_kv @ Jun 13 2009, 15:04) *
А с __swi все впорядке, использую довольно часто.

__swi - это вызов, обработчик-то все равно нужен самописный, более того, на асме (sic!). Не напрягает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 13 2009, 11:33
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:32
Рейтинг@Mail.ru


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