Цитата(prottoss @ May 16 2016, 17:35)

А если это планировщик задач?

Планировщик прекрасно целиком пишется на голом C.
Вот переключение контекста нужно писать на asm (или на C c asm вставками целиком функций), но эти "порты" можно выдрать с любой годной оси (под KEIL или под нужную среду)
и переписать их под себя, коли так уже нужна самодельная ось.
Как-то помню возился и делал сам порт под Cortex-M0+, имея на руках тока порт под M3.
Мартышкин труд, промудохался помню много, потом открыл примеры других осей под M0 и дело пошло быстрее

Вот пример (кусок С-файла):
CODE
__asm void SVC_Handler (void)
{
movs R0, #4
mov R1, LR
tst R0, R1
beq msp_stacked
psp_stacked
mrs R0,PSP // Read PSP
b done
msp_stacked
mrs R0,MSP // Read MSP
done
ldr R1,[R0,#24] // Read Saved PC from Stack
subs R1,R1,#2 // Point to SVC Instruction
ldrb R1,[R1] // Load SVC index
cmp R1,#0
beq svc_0 // SVC0
cmp R1,#1
beq svc_1 // SVC1
cmp R1,#2
beq svc_2 // SVC2
svc_0
ldr R0, =__cpp(&tn_start_first_task)
bx R0
svc_1
ldr R0, =__cpp(&tn_tick_int_processing)
bx R0
svc_2
ldr R0, =__cpp(&tn_timer)
bx R0
ALIGN
}
Сообщение отредактировал IgorKossak - May 16 2016, 17:46
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!