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

 
 
> Написал порт 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
Ответов
GetSmart
сообщение May 16 2006, 19:17
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Всё-равно как-то запутанно. Попробуйте разобраться с моим обработчиком. Может переделаете после этого свой.

MODULE MULTI_TASK

PUBLIC TASK_IRQ
EXTERN TASK_DATA
RSEG IRQ_STACK

RSEG ICODE
CODE32

VIC_ORG EQU 0xFFFFF000
VICSoftInt EQU 0xFFFFF018
VICSoftIntClear EQU 0xFFFFF01C
VICVectAddr EQU 0xFFFFF030

VIC_TIMER1 EQU 5
T1_ORG EQU 0xE0008000
T1IR EQU 0xE0008000
T1TC EQU 0xE0008008
T1MR0 EQU 0xE0008018


TASK_IRQ: sub lr,lr,#4
stmdb sp!,{lr}
mrs lr,SPSR
stmdb sp!,{r12,lr}
mov r12,sp ; указатель в стеке IRQ
msr CPSR_cf,lr ; перек. в SYSTEM с разреш. прерыван.
stmdb sp!,{r0-r11,lr}
ldmia r12!,{r9-r11}
stmdb sp!,{r9-r11} ; R12, CPSR, PC

ldr lr,=TASK_DATA+8
ldr r11,[lr,#-4] ; TaskCur
str sp,[lr,+r11,LSL #3]
add r11,r11,#1
ldr r10,[lr,#-8] ; TaskMax
cmp r11,r10
bcc TaskIrq50
mov r11,#0
TaskIrq50: str r11,[lr,#-4] ; TaskCur
add lr,lr,r11,LSL #3
TaskIrq60: ldr sp,[lr,#+0] ; указатель SP новой задачи
ldr r11,[lr,#+4] ; период задачи в тиках
ldr lr,=T1_ORG
str r11,[lr, #+T1MR0 - T1_ORG]
mov r11,#0
str r11,[lr, #+T1TC - T1_ORG] ; сброс таймера в 0
mov r11,#0xff
str r11,[lr, #+T1IR - T1_ORG] ; сброс установленных битов

ldmia sp!,{r9-r11}
stmdb r12!,{r9-r11} ; R12, CPSR, PC
ldmia sp!,{r0-r11,lr}
mrs r12,CPSR
orr r12,r12,#0xD2
bic r12,r12,#0x0D
msr cpsr_cf,r12 ; перезагрузка LR и SP
ldr r12,=VIC_ORG
mov lr,#(1 << VIC_TIMER1)
str lr,[r12,#+VICSoftIntClear - VIC_ORG]
str lr,[r12,#+VICVectAddr - VIC_ORG]; сброс приоритетов VIC
ldmia sp!,{r12,lr}
msr SPSR_cf,lr
ldmia sp!,{pc}^

LTORG

END
____________________________________
Из си-шного файла:

#define TaskMax 3

typedef struct
{ void (*Task)();
xLong Ticks;
} st_task_rec;

typedef struct
{ xLong Max;
xLong Cur;
st_task_rec List[TaskMax];
} st_task;

st_task TASK_DATA;

void RegisterTask(void (*task)(), xInt prior)
{
static const xLong priorTime[SpeedTaskMax] = {PCLKFREQ/50,PCLKFREQ/100,PCLKFREQ/200};

if (TASK_DATA.Max >= TaskMax) return;
if (prior >= SpeedTaskMax) prior = SpeedTaskMax-1;

TASK_DATA.List[TASK_DATA.Max].Task = task;
TASK_DATA.List[TASK_DATA.Max++].Ticks = priorTime[prior];
}

Вообще, у каждой задачи свой стек, в котором по прерыванию таймера (или по команде симуляции аппаратного прерывания) сначала сохраняется контекст (R0-R12,LR, SP, CPSR_main, PC), затем происходит переключение на стек новой задачи и обратная загрузка контекста и переход на прерванную задачу. При всём этом немного используется IRQ-стек. Иначе нельзя.


--------------------
Заблуждаться - Ваше законное право :-)
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, 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
- - sergeeff   Я давно приглядываюсь к scmRTOS применительно к AR...   May 20 2006, 14:01
|- - Сергей Борщ   Цитата(sergeeff @ May 20 2006, 17:01) Я д...   May 20 2006, 17: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 Текстовая версия Сейчас: 25th July 2025 - 23:33
Рейтинг@Mail.ru


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