|
Что такое ARM7 и как с ним бороться |
|
|
|
 |
Ответов
|
Dec 23 2006, 23:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата А что касается прерываний, то таки да, два приоритета: FIQ и IRQ (остальные исключения ради простоты можно сейчас не рассматривать). Один раз посмотреть на регистровые банки достаточно. Неплохо помнить о переключении ARM/THUMB (хотя для начала можно писать под любой из режимов). Помнить о продвинутом контроллере прервываний (VIC/AIC etc.). Подход к периферии непривычен с точки зрения человека привыкшего к 8-биткам. Лично я, когда начинал, больше намучился с периферией, чем с ядром. Долго воевал с векторными прерываниями и снятием флажков. С конфигурированием. А сама идея отдельного банка для прерываний проста как шоколад.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Dec 24 2006, 13:03
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(beer_warrior @ Dec 23 2006, 22:49)  Неплохо помнить о переключении ARM/THUMB Ну, обычно об этом должен помнить компилятор. Цитата(beer_warrior @ Dec 23 2006, 22:49)  Помнить о продвинутом контроллере прервываний (VIC/AIC etc.). Точнее об его полном отсутствии в ADuC и необходимости вручную накладывать маску на флаги при опознавании источника прерываний. Цитата(beer_warrior @ Dec 23 2006, 22:49)  Подход к периферии непривычен с точки зрения человека привыкшего к 8-биткам. Да нет там ничего особо непривычного. Компилятор сам помнит какой регистр периферии 8 бит а какой 32 или 16, и сам подставляет нужную команду (не ошибаясь). Про ОС - вышел релиз scmRTOS 3.0beta, там есть порт под ADuC, но, к сожалению, пока только для IAR.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 24 2006, 15:34
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Цитата(beer_warrior @ Dec 23 2006, 22:49)  Неплохо помнить о переключении ARM/THUMB
Ну, обычно об этом должен помнить компилятор. Обычно об этом должен помнить линкер. И автор программы, когда дело доходит до прерываний. Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Цитата(beer_warrior @ Dec 23 2006, 22:49)  Помнить о продвинутом контроллере прервываний (VIC/AIC etc.).
Точнее об его полном отсутствии в ADuC и необходимости вручную накладывать маску на флаги при опознавании источника прерываний. Сколько производителей, столько и мнений  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Компилятор сам помнит какой регистр периферии 8 бит а какой 32 или 16, и сам подставляет нужную команду (не ошибаясь). Компилятор знать ничего не знает ни о перифирии, ни о размерности ее регистров. А ошибки, связанные с неправильным описанием регистров, не так уж редки.
|
|
|
|
|
Dec 24 2006, 18:47
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(aaarrr @ Dec 24 2006, 14:34)  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Цитата(beer_warrior @ Dec 23 2006, 22:49)  Неплохо помнить о переключении ARM/THUMB
Ну, обычно об этом должен помнить компилятор. Обычно об этом должен помнить линкер. И автор программы, когда дело доходит до прерываний. Линкер-то да, но компилятор должен предоставить возможность выбрать либо универсальный переход (BX) если смена режима, либо более короткий и быстрый BL если смены нет. А на попытку описать функцию как обработчик прерывания в thumb ругатья должен таки компилятор. Как следствие ошибка отлавливается в процессе компиляции а не после запуска. Цитата(aaarrr @ Dec 24 2006, 14:34)  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Цитата(beer_warrior @ Dec 23 2006, 22:49)  Помнить о продвинутом контроллере прервываний (VIC/AIC etc.).
Точнее об его полном отсутствии в ADuC и необходимости вручную накладывать маску на флаги при опознавании источника прерываний. Сколько производителей, столько и мнений  Это точно. Но: 1) В исходном посте ечь шла про ADuC и 2) Ну что им сложно было сделать аппаратное наложение маски????? Цитата(aaarrr @ Dec 24 2006, 14:34)  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Компилятор сам помнит какой регистр периферии 8 бит а какой 32 или 16, и сам подставляет нужную команду (не ошибаясь).
Компилятор знать ничего не знает ни о перифирии, ни о размерности ее регистров. Почему? Конечно с его точки зрения это обычные sfr, но они уже описаны, причем в описании указан размер. Ошибка в описании если и есть то после первого же вылавливания исправляется и не возникает совершенно случайно в одном из n обращений к этому sfr. В отличие от писания на ассемблере где размер sfr надо помнить программисту, а творческий простор для неправильных обращений к sfr практически не ограничен :-) Для Bird2: Им еще в ADuC удалось сделать совершенно чудовищные sfr портов ввода-вывода, поэтому во избежание дурацких недоразумений очень удобно "дерганье ног" делать сразу через макросы (спасибо Аскольду Волкову за идею). Внутри файла комментарии как использовать. Сам пользуюсь уже 6 лет.
Прикрепленные файлы
ascold.zip ( 1.17 килобайт )
Кол-во скачиваний: 94
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Bird2 Что такое ARM7 и как с ним бороться Dec 23 2006, 18:28 aaarrr Цитата(Bird2 @ Dec 23 2006, 18:28) Дали н... Dec 23 2006, 18:48 beer_warrior В принципе если писать на С ядром можно и не замор... Dec 23 2006, 22:37 aaarrr Цитата(beer_warrior @ Dec 23 2006, 22:37)... Dec 23 2006, 22:52    aaarrr Цитата(Сергей Борщ @ Dec 24 2006, 18:47) ... Dec 24 2006, 19:18     Сергей Борщ Цитата(aaarrr @ Dec 24 2006, 18:18) Компи... Dec 24 2006, 19:53 beer_warrior ЦитатаНу, обычно об этом должен помнить компилятор... Dec 24 2006, 22:07 Сергей Борщ Цитата(beer_warrior @ Dec 24 2006, 21:07)... Dec 25 2006, 16:04 Bird2 То есть, если я правильно понял, на С по барабану,... Dec 24 2006, 22:38 aaarrr Цитата(Bird2 @ Dec 24 2006, 22:38) То ест... Dec 24 2006, 23:40 Bird2 Понятно, будет бороться. Крайний вопрос:
скачал ке... Dec 27 2006, 00:54 Dopler Боюсь, вы скачали не тот Keil. Для ARM нужен uVisi... Dec 27 2006, 01:43 VAI Цитатаскачал кейл 8.02,
Это для 51-х, а Вам надо д... Dec 27 2006, 09:43 Andy Great Ну, если быть точным, то могут сосуществовать 2я и... Dec 27 2006, 11:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|