|
Что такое ARM7 и как с ним бороться |
|
|
|
Dec 23 2006, 18:48
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Bird2 @ Dec 23 2006, 18:28)  Дали небольшую задачку, но камень должон быть AD ADuC 7026 (там вроде как хорошие ЦАПы). А я с этим ядром вообще не знаком... А тут еще операционные системы под них... Если задачка небольшая, то с ОС можно не заморачиваться. Для знакомства с ядром посмотрите TRM - учить его наизусть не стоит, но чтение полезное. Цитата(Bird2 @ Dec 23 2006, 18:28)  Подскажите, плз, где взять инфу про работу с кейлом для АРМ и про ОС для них. У Keil'а и взять. Учитывая тот факт, что Keil был недавно куплен ARM, стоит посмотреть и arm.com
|
|
|
|
|
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)
|
|
|
|
|
Dec 24 2006, 19:18
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Сергей Борщ @ Dec 24 2006, 18:47)  Линкер-то да, но компилятор должен предоставить возможность выбрать либо универсальный переход (BX) если смена режима, либо более короткий и быстрый BL если смены нет. Компилятор ничего предоставлять не должен. При вызове Thumb-функции из режима ARM линкер подставляет вызов своего veneer-кода, который и осуществляет корректное переключение режима. Цитата(Сергей Борщ @ Dec 24 2006, 18:47)  А на попытку описать функцию как обработчик прерывания в thumb ругатья должен таки компилятор. Как следствие ошибка отлавливается в процессе компиляции а не после запуска. Не будет - ничто не мешает писать обработчик в режиме Thumb, просто нужно помнить, что переход на вектор осуществяется в режиме ARM. Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Ну что им сложно было сделать аппаратное наложение маски????? Эх, PIC'и вспоминаются  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Почему? Конечно с его точки зрения это обычные sfr, но они уже описаны, причем в описании указан размер. Это если описаны. А если пишешь сам (что приходится делать практически всегда), то случаются ошибки. А на асме, конечно, неудобнее, спору нет.
|
|
|
|
|
Dec 24 2006, 19:53
|

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

|
Цитата(aaarrr @ Dec 24 2006, 18:18)  Компилятор ничего предоставлять не должен. При вызове Thumb-функции из режима ARM линкер подставляет вызов своего veneer-кода, который и осуществляет корректное переключение режима. Ну хорошо, может сойдемся на связке компилятор-линкер? У кого из них больше работы - детали реализации. В любом случае не программист. Цитата(aaarrr @ Dec 24 2006, 18:18)  Цитата(Сергей Борщ @ Dec 24 2006, 18:47)  А на попытку описать функцию как обработчик прерывания в thumb ругатья должен таки компилятор. Как следствие ошибка отлавливается в процессе компиляции а не после запуска.
Не будет - ничто не мешает писать обработчик в режиме Thumb, просто нужно помнить, что переход на вектор осуществяется в режиме ARM. В любом случае код, "принимающий" управление на векторе исключения должен быть arm. Дальше конечно - что пожелаете. Тут плавно переходим к первому абзацу :-) Цитата(aaarrr @ Dec 24 2006, 18:18)  Цитата(Сергей Борщ @ Dec 24 2006, 13:03)  Ну что им сложно было сделать аппаратное наложение маски????? Эх, PIC'и вспоминаются  Вот-вот :-(
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 25 2006, 16:04
|

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

|
Цитата(beer_warrior @ Dec 24 2006, 21:07)  Цитата Ну, обычно об этом должен помнить компилятор. Ну вообще-то при создании проекта, об этом должен сказать программист. Если я правильно понимаю, программист при создании проекта говорит в каком режиме компилировать функции по умолчанию. При этом остается возможность жестко указать - эту функцию в thumb, а эту - в Arm. Компилятор (а не программист) должен думать и помнить о том, что при вызове функции foo2 из foo1 надо переключать режим, а при вызове foo3 из foo1 - не надо.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|