|
Написал порт scmRTOS под ARM, интересны отзывы |
|
|
|
 |
Ответов
|
May 20 2006, 14:01
|
Профессионал
    
Группа: Свой
Сообщений: 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 Очевидно имеем констатное время поиска номера младшего установленного бита в слове.
Думаю полезно эту функцию использовать вместо стандартного решения.
|
|
|
|
|
May 20 2006, 17:50
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
Сообщений в этой теме
Сергей Борщ Написал порт 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|