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

 
 
> Написал порт 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

Сообщений в этой теме
- Сергей Борщ   Написал порт 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
||- - ig_z   Цитата(Сергей Борщ @ May 20 2006, 20:50) ...   May 21 2006, 00:02
||- - Dainis   Цитата(ig_z @ May 20 2006, 18:01) Почему ...   May 21 2006, 12:07
|- - 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 Текстовая версия Сейчас: 24th July 2025 - 22:53
Рейтинг@Mail.ru


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