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

 
 
> Написал порт scmRTOS под ARM, интересны отзывы
Сергей Борщ
сообщение May 15 2006, 14:19
Сообщение #1


Гуру
******

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



Написал порт scmRTOS (http://scmrtos.narod.ru/) для ARM. Отлаживал на AT91SAM7S64. Поскольку опыта в ARMах пока маловато (второй проект на ARM и первый с асмом), то перед тем как связываться с автором хотелось бы чтобы кто-то более опытный глянул. Порт лежит тут: http://upload.caxapa.ru/scmRTOS_arm.zip
Спасибо всем.


--------------------
На любой вопрос даю любой ответ
"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
 
Start new topic
Ответов
sergeeff
сообщение May 20 2006, 14:01
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я давно приглядываюсь к scmRTOS применительно к ARM. На работе текучка одолела – совершенно невозможно заняться чем-то впрок.

Но есть соображение насчет скорости работы scheduler’а. Поиск текущей приоритетной задачи осуществляется простым перебором бит в слове состояния процессов. Очевидно, что время поиска прямо пропрционально номеру приоритета, что не есть хорошо. Есть классная функция, оптимизированная для ARM, которая выдает номер младшего установленного бита в 32-разрядном слове (она используется в Linux’e и TNKernel). Вот ее текст:
ffs_asm:

;-- Standard trick to isolate bottom bit in r0 or 0 if r0 = 0 on entry
rsb r1, r0, #0
ands r0, r0, r1


;-- now r0 has at most one set bit, call this X
;-- if X = 0, all further instructions are skipped

adrne r2, .L_ffs_table
orrne r0, r0, r0, lsl #4 ; r0 = X * 0x11
orrne r0, r0, r0, lsl #6 ; r0 = X * 0x451
rsbne r0, r0, r0, lsl #16 ; r0 = X * 0x0450fbaf

;-- now lookup in table indexed on top 6 bits of r0
ldrneb r0, [ r2, r0, lsr #26 ]
bx lr

.L_ffs_table:
;-- 0 1 2 3 4 5 6 7
.data.b 0, 1, 2, 13, 3, 7, 0, 14 ; 0- 7
.data.b 4, 0, 8, 0, 0, 0, 0, 15 ; 8-15
.data.b 11, 5, 0, 0, 9, 0, 0, 26 ; 16-23
.data.b 0, 0, 0, 0, 0, 22, 28, 16 ; 24-31
.data.b 32, 12, 6, 0, 0, 0, 0, 0 ; 32-39
.data.b 10, 0, 0, 25, 0, 0, 21, 27 ; 40-47
.data.b 31, 0, 0, 0, 0, 24, 0, 20 ; 48-55
.data.b 30, 0, 23, 19, 29, 18, 17, 0 ; 56-63
Очевидно имеем констатное время поиска номера младшего установленного бита в слове.

Думаю полезно эту функцию использовать вместо стандартного решения.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2006, 17:50
Сообщение #3


Гуру
******

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



Цитата(sergeeff @ May 20 2006, 17:01) *
Я давно приглядываюсь к scmRTOS применительно к ARM. На работе текучка одолела – совершенно невозможно заняться чем-то впрок.

Но есть соображение насчет скорости работы scheduler’а. Поиск текущей приоритетной задачи осуществляется простым перебором бит в слове состояния процессов. Очевидно, что время поиска прямо пропрционально номеру приоритета, что не есть хорошо. Есть классная функция, оптимизированная для ARM, которая выдает номер младшего установленного бита в 32-разрядном слове (она используется в Linux’e и TNKernel). Вот ее текст:
Думаю полезно эту функцию использовать вместо стандартного решения.
Отлично! Гарри как раз спрашивал, если такая аппаратная функция в ARM. Обязательно добавлю.


Цитата(ig_z @ May 20 2006, 18:01) *
Посмотрел ваш порт, сходу возник архитектурный вопрос.
Почему для контекст свитчера вы выбрали ВИК-СВ а не просто СВИ, были какие то особые причины? СВИ - ядерная часть и поэтому есть у всех, а ВИК - периферия, имеет право и не быть в кристалле.
Дело в том, что SWI всем хороша кроме одного - она исполняется независимо от того - разрешены прерывания или нет. Когда переключение вызывается из потока проблем нет, а вот когда из прерывания возникают сложности - обработчик прерывания уже наложил в стек своей информации. Идеология scmRTOS предполагает, что при возникновении необходимости переключения контекста внутри обработчика прерывания взводится запрос на переключение а собственно прерывание переключателя вызывается в момент выхода из обработчика, когда разрешаются глобальные прерывания и стек содержит только данные текущего потока. Я подумывал о использовании SWI при вызове из потока и "честного" прерывания при переключении в обработчике прерывания, но это потребовало бы изменения "непортируемой" части ОС, хотя и ускорило бы переключение. В общем я пока в раздумье. Есть идеи?


Цитата(sergeeff @ May 20 2006, 18:32) *
Да. Еще про critical section. Твой вариант запрета/разрешения прерываний не очень безопасный вариант (см. Atmel Application Note Rev. 1156A–08/98) и лучше это сделать так, как сделано в UCOS порте для ARM:
...........
Работает дольше, но безопаснее
Спасибо, не знал (только начинаю ARM осваивать). Изучу и учту. Собственно ради таких замечаний и открыл это обсуждение.

Сообщение отредактировал Сергей Борщ - May 20 2006, 17:52


--------------------
На любой вопрос даю любой ответ
"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
ig_z
сообщение May 21 2006, 00:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(Сергей Борщ @ May 20 2006, 20:50) *
Цитата(ig_z @ May 20 2006, 18:01) *

Посмотрел ваш порт, сходу возник архитектурный вопрос.
Почему для контекст свитчера вы выбрали ВИК-СВ а не просто СВИ, были какие то особые причины? СВИ - ядерная часть и поэтому есть у всех, а ВИК - периферия, имеет право и не быть в кристалле.
Дело в том, что SWI всем хороша кроме одного - она исполняется независимо от того - разрешены прерывания или нет. Когда переключение вызывается из потока проблем нет, а вот когда из прерывания возникают сложности - обработчик прерывания уже наложил в стек своей информации. Идеология scmRTOS предполагает, что при возникновении необходимости переключения контекста внутри обработчика прерывания взводится запрос на переключение а собственно прерывание переключателя вызывается в момент выхода из обработчика, когда разрешаются глобальные прерывания и стек содержит только данные текущего потока. Я подумывал о использовании SWI при вызове из потока и "честного" прерывания при переключении в обработчике прерывания, но это потребовало бы изменения "непортируемой" части ОС, хотя и ускорило бы переключение. В общем я пока в раздумье. Есть идеи?


Если я правильно понимаю - SWI имеет 6-й наинизший приоритет, поэтому не может прерывать FIQ (3) IRQ (4). Иначе вообще не понятно, зачем нужны софт прерывания.


Цитата(Сергей Борщ @ May 20 2006, 20:50) *
Цитата(sergeeff @ May 20 2006, 18:32) *

Да. Еще про critical section. Твой вариант запрета/разрешения прерываний не очень безопасный вариант (см. Atmel Application Note Rev. 1156A–08/98) и лучше это сделать так, как сделано в UCOS порте для ARM:
...........
Работает дольше, но безопаснее
Спасибо, не знал (только начинаю ARM осваивать). Изучу и учту. Собственно ради таких замечаний и открыл это обсуждение.


Возможно достаточно использовать интринсики __disable_interrupt __enable_interrupt. Соответствуют рекомендациям АРМ. Но они вроде бы не инлайнятся.
Go to the top of the page
 
+Quote Post
Dainis
сообщение May 21 2006, 12:07
Сообщение #5


Местный
***

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



Цитата(ig_z @ May 20 2006, 18:01) *
Почему для контекст свитчера вы выбрали ВИК-СВ а не просто СВИ, были какие то особые причины? СВИ - ядерная часть и поэтому есть у всех, а ВИК - периферия, имеет право и не быть в кристалле.
Если я правильно понимаю - SWI имеет 6-й наинизший приоритет, поэтому не может прерывать FIQ (3) IRQ (4). Иначе вообще не понятно, зачем нужны софт прерывания.


SWI единственный коректный способ вызова SYSTEM (protected) режима или функций от USER режима.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Сергей Борщ   Написал порт scmRTOS под ARM   May 15 2006, 14:19
- - Pat   Цитата(Сергей Борщ @ May 15 2006, 16:19) ...   May 15 2006, 16:20
- - Сергей Борщ   >Я не шибко опытный, но что то компилер не нахо...   May 15 2006, 16:35
|- - Pat   Скомпилир все ОК. Запускаю отладку в симуляторе. П...   May 15 2006, 17:20
|- - Сергей Борщ   Цитата(Pat @ May 15 2006, 20:20) Скомпили...   May 15 2006, 17:44
|- - Сергей Борщ   Цитата(Pat @ May 15 2006, 20:20) Запускаю...   May 16 2006, 14:10
- - GetSmart   ЦитатаВ данной же ситуации симулятор загружает SPS...   May 16 2006, 15:43
|- - Сергей Борщ   Цитата(GetSmart @ May 16 2006, 18:43) Цит...   May 16 2006, 16:04
|- - spf   Цитата(Сергей Борщ @ May 16 2006, 22:04) ...   May 17 2006, 03:45
- - GetSmart   Напишите комментарии в ASM-файле к каждой команде....   May 16 2006, 16:32
|- - Сергей Борщ   Цитата(GetSmart @ May 16 2006, 19:32) Нап...   May 16 2006, 18:36
- - GetSmart   Вопрос: почему у вас в xcl-файле начальные адреса ...   May 16 2006, 18:09
- - GetSmart   Всё-равно как-то запутанно. Попробуйте разобраться...   May 16 2006, 19:17
|- - Сергей Борщ   Цитата(GetSmart @ May 16 2006, 22:17) Всё...   May 16 2006, 19:57
- - GetSmart   Цитатаmsr CPSR_cf,lr ; перек. в SYSTEM с разреш. п...   May 16 2006, 20:20
- - Сергей Борщ   Послушал советы, кое-чего поправил. Сделал targets...   May 17 2006, 12:37
- - GetSmart   ЦитатаСтранно, но почему-то в моем макете с AT91SA...   May 17 2006, 16:17
|- - Сергей Борщ   Цитата(GetSmart @ May 17 2006, 19:17) Цит...   May 17 2006, 16:56
|- - zltigo   Не сочтите за 'наезд' - работа несомненно ...   May 18 2006, 07:06
|- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 10:06) Цитат...   May 18 2006, 07:45
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 10:45) ...   May 18 2006, 08:29
|- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 11:29) Цитат...   May 18 2006, 09:08
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 12:08) ...   May 18 2006, 09:37
|- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 12:37) Цитат...   May 18 2006, 13:06
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 16:06) ...   May 18 2006, 14:38
- - GetSmart   Смотрите, что я нарыл: (цитата из книжки) Бит S ис...   May 17 2006, 18:11
|- - GetSmart   Касательно файла Target_LPC2xxx.h "#define C...   May 17 2006, 18:53
||- - Сергей Борщ   Цитата(GetSmart @ May 17 2006, 21:53) Кас...   May 18 2006, 08:14
|- - Сергей Борщ   Цитата(GetSmart @ May 17 2006, 21:11) Смо...   May 18 2006, 07:16
- - GetSmart   ЦитатаНо все же я настаиваю, что восстановление CP...   May 17 2006, 21:04
|- - Сергей Борщ   Цитата(GetSmart @ May 18 2006, 00:04) Дум...   May 18 2006, 07:00
- - GetSmart   ЦитатаЦитата Команды "LDMFD LR, {R0-LR}^ ; NO...   May 18 2006, 09:13
- - zltigo   Давайте я Вас еще попытаюсь совлечь c "пути и...   May 18 2006, 15:01
|- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 18:01) Давай...   May 18 2006, 15:21
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 18:21) ...   May 18 2006, 15:40
- - Сергей Борщ   Сравнил по скорости с FreeRTOS. Тест простой: низк...   May 18 2006, 15:14
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 18:04) ...   May 18 2006, 15:16
||- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 18:16) Цитат...   May 18 2006, 15:41
|- - zltigo   [quote name='Сергей Борщ' date='May 18...   May 18 2006, 15:24
|- - zltigo   Цитата(Сергей Борщ @ May 18 2006, 18:14) ...   May 18 2006, 18:50
|- - Сергей Борщ   Цитата(zltigo @ May 18 2006, 21:50) Цитат...   May 19 2006, 11:04
|- - zltigo   Цитата(Сергей Борщ @ May 19 2006, 14:04) ...   May 19 2006, 11:49
|- - Сергей Борщ   Цитата(zltigo @ May 19 2006, 14:49) Ну во...   May 19 2006, 13:13
|- - zltigo   Цитата(Сергей Борщ @ May 19 2006, 16:13) ...   May 19 2006, 13:32
|- - Сергей Борщ   Цитата(zltigo @ May 19 2006, 16:32) Цитат...   May 19 2006, 13:37
- - GetSmart   2 Сергей Борщ Когда закончите доводить до ума свою...   May 18 2006, 15:41
|- - Сергей Борщ   Цитата(GetSmart @ May 18 2006, 18:41) 2 С...   May 18 2006, 15:50
|- - amusin   Цитата(sergeeff @ May 20 2006, 20:01) Ест...   May 22 2006, 04:55
|- - amusin   Цитата(Сергей Борщ @ May 20 2006, 23:50) ...   May 22 2006, 05:32
|- - Сергей Борщ   Цитата(amusin @ May 22 2006, 08:32) Цитат...   May 22 2006, 08:22
- - ig_z   2 Сергей Борщ Посмотрел ваш порт, сходу возник а...   May 20 2006, 15:01
- - sergeeff   Да. Еще про critical section. Твой вариант запрета...   May 20 2006, 15:32
- - GetSmart   ЦитатаSWI единственный коректный способ вызова SYS...   May 21 2006, 12:36
|- - zltigo   ЦитатаМожно хотябы в общих словах пример кода, я е...   May 21 2006, 16:54
- - GetSmart   Цитатавопрос только в том, нужны-ли эти выкрутасы ...   May 21 2006, 17:38
|- - zltigo   Цитата(GetSmart @ May 21 2006, 20:38) А п...   May 21 2006, 18:34
- - GetSmart   Самая близкая по смыслу цитата из <arm7tdmi.pdf...   May 21 2006, 19:08
|- - zltigo   Цитата(GetSmart @ May 21 2006, 22:08) Про...   May 21 2006, 20:02
- - Сергей Борщ   Завтра (в понедельник) буду изучать все это вдумчи...   May 21 2006, 19:42
|- - zltigo   Цитата(Сергей Борщ @ May 21 2006, 22:42) ...   May 21 2006, 20:33
- - GetSmart   1,2,3 - OK 4. Как только в коде (даже в IRQ, и даж...   May 21 2006, 19:57
- - GetSmart   ЦитатаА посмотреть на исходник и почитать Аtmel-ов...   May 21 2006, 20:34
|- - zltigo   Цитата(GetSmart @ May 21 2006, 23:34) У-у...   May 21 2006, 20:57
- - GetSmart   ЦитатаНе стал, но завязан :-( А AIC уже в официаль...   May 21 2006, 21:28
|- - zltigo   Цитата(GetSmart @ May 22 2006, 00:28) Ну ...   May 21 2006, 22:21
- - aaarrr   Цитата(amusin @ May 22 2006, 09:32) Нет в...   May 22 2006, 10:32
- - Сергей Борщ   Спасибо всем, кто подсказал функцию поиска наиболе...   May 22 2006, 11:30
|- - amusin   Цитата(Сергей Борщ @ May 22 2006, 17:30) ...   May 22 2006, 11:48
|- - Сергей Борщ   Цитата(amusin @ May 22 2006, 14:48) Цитат...   May 22 2006, 11:59
|- - IgorKossak   Цитата(Сергей Борщ @ May 22 2006, 14:59) ...   May 22 2006, 12:16
- - sergeeff   Да, конечно, для ARM надо сделать количество проце...   May 22 2006, 15:40
|- - amusin   Цитата(sergeeff @ May 22 2006, 21:40) Да,...   May 23 2006, 02:32
|- - Сергей Борщ   Цитата(amusin @ May 23 2006, 05:32) Цитат...   May 23 2006, 07:25
- - sergeeff   Пара соображений по поводу быстродействия. Я эту и...   May 26 2006, 17:34
|- - IgorKossak   Цитата(sergeeff @ May 26 2006, 20:34) ......   May 27 2006, 16:03
|- - dxp   Цитата(sergeeff @ May 27 2006, 00:34) voi...   May 29 2006, 03:46
|- - amusin   Цитата(dxp @ May 29 2006, 09:46) Гарри,...   May 29 2006, 06:18
- - GetSmart   ЦитатаУ АРМа есть аппаратный сдвигатель? Конечно е...   May 29 2006, 09:20
|- - spf   Цитата(GetSmart @ May 29 2006, 15:20) Цит...   May 29 2006, 10:16
- - GetSmart   АРМ имеет команды с обоими вариантами: как непосре...   May 29 2006, 10:21


Closed TopicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 23:33
Рейтинг@Mail.ru


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