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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Что такое ARM7 и как с ним бороться
Bird2
сообщение Dec 23 2006, 18:28
Сообщение #1


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

Группа: Свой
Сообщений: 80
Регистрация: 19-12-06
Пользователь №: 23 672



Дали небольшую задачку, но камень должон быть AD ADuC 7026 (там вроде как хорошие ЦАПы). А я с этим ядром вообще не знаком... А тут еще операционные системы под них...
Подскажите, плз, где взять инфу про работу с кейлом для АРМ и про ОС для них.
Спасибо за внимание
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2006, 18:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 23 2006, 22:37
Сообщение #3


Профессионал
*****

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



В принципе если писать на С ядром можно и не заморачиваться. Посмотреть один раз в даташите на раскладку регистров и все.
Помнить, что регистры 32-х разрядные, а прерывания приоритетные.
В общем и целом проц стоит ближе к десктопным, чем к 51-м или АВР.
По части оси - посмотрите FreeRTOS.org там масса примеров.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 23 2006, 22:52
Сообщение #4


Гуру
******

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



Цитата(beer_warrior @ Dec 23 2006, 22:37) *
Помнить, что регистры 32-х разрядные, а прерывания приоритетные.

По-моему, этого недостаточно.
А что касается прерываний, то таки да, два приоритета: FIQ и IRQ (остальные исключения ради простоты можно сейчас не рассматривать). Другие аспекты работы прерываний - дело контроллера прерываний, а не ядра. smile.gif
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 23 2006, 23:49
Сообщение #5


Профессионал
*****

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



Цитата
А что касается прерываний, то таки да, два приоритета: FIQ и IRQ (остальные исключения ради простоты можно сейчас не рассматривать).

Один раз посмотреть на регистровые банки достаточно. Неплохо помнить о переключении ARM/THUMB (хотя для начала можно писать под любой из режимов). Помнить о продвинутом контроллере прервываний (VIC/AIC etc.). Подход к периферии непривычен с точки зрения человека привыкшего к 8-биткам.
Лично я, когда начинал, больше намучился с периферией, чем с ядром. Долго воевал с векторными прерываниями и снятием флажков. С конфигурированием. А сама идея отдельного банка для прерываний проста как шоколад.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 24 2006, 13:03
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 24 2006, 15:34
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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 и необходимости вручную накладывать маску на флаги при опознавании источника прерываний.

Сколько производителей, столько и мнений smile.gif

Цитата(Сергей Борщ @ Dec 24 2006, 13:03) *
Компилятор сам помнит какой регистр периферии 8 бит а какой 32 или 16, и сам подставляет нужную команду (не ошибаясь).

Компилятор знать ничего не знает ни о перифирии, ни о размерности ее регистров. А ошибки, связанные с неправильным описанием регистров, не так уж редки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 24 2006, 18:47
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 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 и необходимости вручную накладывать маску на флаги при опознавании источника прерываний.

Сколько производителей, столько и мнений smile.gif
Это точно. Но: 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)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 24 2006, 19:18
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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'и вспоминаются smile.gif

Цитата(Сергей Борщ @ Dec 24 2006, 13:03) *
Почему? Конечно с его точки зрения это обычные sfr, но они уже описаны, причем в описании указан размер.

Это если описаны. А если пишешь сам (что приходится делать практически всегда), то случаются ошибки. А на асме, конечно, неудобнее, спору нет.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 24 2006, 19:53
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 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'и вспоминаются smile.gif
Вот-вот :-(


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 24 2006, 22:07
Сообщение #11


Профессионал
*****

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



Цитата
Ну, обычно об этом должен помнить компилятор.

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


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Bird2
сообщение Dec 24 2006, 22:38
Сообщение #12


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

Группа: Свой
Сообщений: 80
Регистрация: 19-12-06
Пользователь №: 23 672



То есть, если я правильно понял, на С по барабану, что ядро в общем-то принципиально сильно отличается от 8-ми битного, с переключением Thumb/ARM функциями кейл сам справиться
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 24 2006, 23:40
Сообщение #13


Гуру
******

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



Цитата(Bird2 @ Dec 24 2006, 22:38) *
То есть, если я правильно понял, на С по барабану, что ядро в общем-то принципиально сильно отличается от 8-ми битного, с переключением Thumb/ARM функциями кейл сам справиться

Основное отличие со стороны C - размерность типа int, он будет 32-х битным. С переключением ARM/Thumb сейчас заморачиваться не стоит, сначала освойте режим ARM. Хотя для ADuC Thumb эффективнее.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 25 2006, 16:04
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Bird2
сообщение Dec 27 2006, 00:54
Сообщение #15


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

Группа: Свой
Сообщений: 80
Регистрация: 19-12-06
Пользователь №: 23 672



Понятно, будет бороться. Крайний вопрос:
скачал кейл 8.02, но там весь хелп для С51, хотя в списке девайсов ADuC присутствует. Таблетка почему-то не срабатывает, при попытке просмотреть опции проекта кейл ругается и виснет. Это у меня версия такая (для С51), или просто кейл корявый (или таблетка).
Ну и соответственно, есть ли у кого на примете некорявый (попытки поиска пока ни к чему не привели)
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 - 13:23
Рейтинг@Mail.ru


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