removed double r2 saving/restoring
This commit is contained in:
8
main.c
8
main.c
@@ -76,7 +76,7 @@ typedef struct {
|
|||||||
} task_t;
|
} task_t;
|
||||||
|
|
||||||
|
|
||||||
#define TASK_COUNT_REG 9
|
#define TASK_COUNT_REG 8
|
||||||
|
|
||||||
typedef struct __attribute__((packed)) {
|
typedef struct __attribute__((packed)) {
|
||||||
struct {
|
struct {
|
||||||
@@ -164,20 +164,20 @@ void __attribute__((naked)) pend_sv_handler(void) {
|
|||||||
uint32_t psp;
|
uint32_t psp;
|
||||||
__asm__(
|
__asm__(
|
||||||
"mrs %0, psp\n"
|
"mrs %0, psp\n"
|
||||||
"stmdb %0!, {r2,r4-r11}\n"
|
"stmdb %0!, {r4-r11}\n"
|
||||||
"msr psp, %0\n" : "=r"(psp)
|
"msr psp, %0\n" : "=r"(psp)
|
||||||
);
|
);
|
||||||
g_scheduler.tasks[g_scheduler.current_task].sp = psp;
|
g_scheduler.tasks[g_scheduler.current_task].sp = psp;
|
||||||
} else {
|
} else {
|
||||||
__asm__(
|
__asm__(
|
||||||
"stmdb sp!, {r2,r4-r11}\n");
|
"stmdb sp!, {r4-r11}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduler_switch(&g_scheduler);
|
scheduler_switch(&g_scheduler);
|
||||||
|
|
||||||
uint32_t psp = (uint32_t)g_scheduler.tasks[g_scheduler.current_task].sp;
|
uint32_t psp = (uint32_t)g_scheduler.tasks[g_scheduler.current_task].sp;
|
||||||
__asm__(
|
__asm__(
|
||||||
"ldmfd %0!, {r2,r4-r11}\n"
|
"ldmfd %0!, {r4-r11}\n"
|
||||||
"msr psp, %0\n"::"r"(psp)
|
"msr psp, %0\n"::"r"(psp)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user