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

 
 
> uVision 4 VS uVision 3 - Синтаксис, Как писать в этом новом монстре?
_shef_
сообщение Apr 23 2010, 22:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 19-05-08
Пользователь №: 37 631



Доброго времени суток.
Я недавно начал изучать АРМ. Прочитал Мартина. Скачал Evaluation Keil uVision 4.00u.
И вот результат. Некоторые вещи я не могу использовать, а точнее не знаю как.

Например:

void MyFunction (void) __irq; - работает
void MyFunction (void) __fiq; - компилятор не удовлетворяется такой записью

void MyFunction (void) __task; - тоже проблема, гуглил код ошибки - попал на сайт Keil'а. Там написано, что теперь модно писать так:
__task void MyFunction (void); ну или что то вроде этого. Так вот такойо вариант тоже не проходит.

Плюс мелкие брызги типа:
EXTERN CODE32 (myFunction?A) пришлось урезать до IMPORT myFunction

Есть где-то справка по этому компилятору? Может я плохо искал?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
igorsk
сообщение Apr 24 2010, 01:00
Сообщение #2


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

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Placing ARM function qualifiers
__irq
Насколько я в курсе, порядок вызова FIQ ничем не отличается от IRQ, так что можно использовать тот же самый атрибут __irq.
Про __task нашел старую доку:
Цитата
The __task attribute affects the generated code of the function as follows:
The function does not include a prolog or an epilog. Therefore, it is not possible to call the function from other routines. Instead, the Real-Time Operating System must save and restore all CPU register context.

Честно говоря слабо представляю, зачем такое может понадобиться, но думаю, что отсутствие этого атрибута вряд ли что-то сломает.
Go to the top of the page
 
+Quote Post
_shef_
сообщение Apr 24 2010, 21:00
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 19-05-08
Пользователь №: 37 631



Цитата(igorsk @ Apr 24 2010, 04:15) *
Placing ARM function qualifiers
__irq
Насколько я в курсе, порядок вызова FIQ ничем не отличается от IRQ, так что можно использовать тот же самый атрибут __irq.
Про __task нашел старую доку:

Честно говоря слабо представляю, зачем такое может понадобиться, но думаю, что отсутствие этого атрибута вряд ли что-то сломает.


Так то оно так. Только в случае __irq компилятор вставляет сохранение контекста в стеке, а быстрое прерывание имеет свои плюсы - R8-R12 заменяются аппаратно и их вполне может хватить для обработки прерывание. Т.е. операции сохранения и восстановления контекста компилятор может и не воткнуть как в первом случае. Я думаю разница только в этом.

По поводу __task:
К сожалению я строю свою ОС. И в процессе этого строительства изучаю АРМ. Я много уже выслушал на свой счет, но МНЕ ТАК УДОБНО.
Когда я дошел до того момента, когда мои функции становятся потоками - я нуждаюсь в таком атрибуте как __task.
На данный момент я использую такой метод:

pTmpContext->RegistrLR = ((unsigned int) Routine) + 4;

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


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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