|
как сделать, чтоб асм не ругался |
|
|
|
Aug 26 2008, 08:58
|

Участник

Группа: Свой
Сообщений: 61
Регистрация: 2-08-05
Из: Коломна
Пользователь №: 7 283

|
Начал поднимать data cache-MMU в железке на базе SAM9263. Компилер - IAR 5.1. Нашел на атмеле примерный проектик с драйстоун тестом, где кеши активно используются, но немножко не под мой компилятор  . И вот такая конструкция не компилится по причине того, что в асмовской инструкции я не могу использовать свою переменную ctl. Хотя это неправильно, она же регистровая... Не хотелось бы ломать красивый код, а настроить свой асм, чтоб он понимал такой синтаксис. И еще вопрос, если кто занимался - у at91rm9200 и at91sam9263 принципиально чем-то отличается работа с MMU и дата кешем? __inline unsigned int AT91F_ARM_ReadControl() { register unsigned int ctl; __asm("MRC p15, 0, ctl, c1, c0, 0"); return ctl; } Спасибо.
|
|
|
|
|
 |
Ответов
|
Aug 26 2008, 10:43
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Не вижу проблем в обеспечении универсальности: Код #ifdef __IAR_SYSTEMS_ICC__ __arm unsigned int AT91F_ARM_ReadControl(void) { return __MRC(15,0,ctl,1,0,0); } #else __inline unsigned int AT91F_ARM_ReadControl() { register unsigned int ctl; __asm("MRC p15, 0, ctl, c1, c0, 0"); return ctl; } #endif Только вот в даташит гляньте, что надо вместо ctl поставить (численное значение, я имею в виду)
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 26 2008, 11:35
|

Участник

Группа: Свой
Сообщений: 61
Регистрация: 2-08-05
Из: Коломна
Пользователь №: 7 283

|
Цитата(Rst7 @ Aug 26 2008, 14:43)  Не вижу проблем в обеспечении универсальности: Код #ifdef __IAR_SYSTEMS_ICC__ __arm unsigned int AT91F_ARM_ReadControl(void) { return __MRC(15,0,ctl,1,0,0); } #else __inline unsigned int AT91F_ARM_ReadControl() { register unsigned int ctl; __asm("MRC p15, 0, ctl, c1, c0, 0"); return ctl; } #endif Только вот в даташит гляньте, что надо вместо ctl поставить (численное значение, я имею в виду) Строка __asm("MRC p15, 0, ctl, c1, c0, 0"); не прокатывает. Этой инструкции нужно не переменную передать, а явно указать регистр. Вот так получается: __asm("MRC p15, 0, r0, c1, c0, 0"); Я собственно и спрашиваю, как сделать, чтоб заработало с переменной.
|
|
|
|
Сообщений в этой теме
Gemm как сделать, чтоб асм не ругался Aug 26 2008, 08:58 Rst7 Есть специальная функция в IAR'е
Цитата__MRC
S... Aug 26 2008, 09:08 Gemm Цитата(Rst7 @ Aug 26 2008, 13:08) Есть сп... Aug 26 2008, 09:26  aaarrr Цитата(Gemm @ Aug 26 2008, 13:26) А под в... Aug 26 2008, 09:31   Gemm Цитата(aaarrr @ Aug 26 2008, 13:31) Компи... Aug 26 2008, 09:39 aaarrr Цитата(Rst7 @ Aug 26 2008, 13:08) Есть сп... Aug 26 2008, 11:45 aaarrr Цитата(Gemm @ Aug 26 2008, 12:58) Не хоте... Aug 26 2008, 09:14 Alex03 Если вы знаете соглашение о вызовах, например что ... Aug 26 2008, 11:53 Rst7 ЦитатаЯ собственно и спрашиваю, как сделать, чтоб ... Aug 26 2008, 12:15 Gemm Цитата(Rst7 @ Aug 26 2008, 16:15) Дык для... Aug 26 2008, 12:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|