ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
29 июня
34824 Топик полностью
Mahagam (05.07.2005 12:35, просмотров: 1) ответил Cидopгeк на Прежде чем либы править, я бы трижды проверил, что все работает как надо. Ну не совсем же они буратины деревянные, что такой ляп посадили.
ляп виден сразу 0x40001804 ://наша функция по переключению тасков 0x40001804 <$a>: 0x40001804 0xE1A0C00D mov r12, sp 0x40001808 0xE92DD8F0 stmfd sp!, {r4-r7, r11-r12, lr-pc}//сохранили контекст 0x4000180C 0xE24CB004 sub r11, r12, #0x00000004 0x40001810 0xE1A06000 mov r6, r0 0x40001814 0xEB0000B8 bl 0x40001AFC ctl_global_interrupts_disable> 0x40001818 0xE59F20C4 ldr r2, [pc, #196] 0x4000181C 0xE5D23000 ldrb r3, [r2] 0x40001820 0xE2433001 sub r3, r3, #0x00000001 0x40001824 0xE5C23000 strb r3, [r2] 0x40001828 0xE5D23000 ldrb r3, [r2] 0x4000182C 0xE3530000 cmp r3, #0x00000000 0x40001830 0x1A000028 bne 0x400018D8 0x40001834 0xE1A01003 mov r1, r3 0x40001838 0xE59F30A8 ldr r3, [pc, #168] 0x4000183C 0xE5934000 ldr r4, [r3] 0x40001840 0xE3540000 cmp r4, #0x00000000// тут мы смотрим в таск лист - есть ли ещё таск на выполнение 0x40001844 0x0A000023 beq 0x400018D8// нет - выход из процедурки 0x40001848 0xE59F309C ldr r3, [pc, #156] 0x4000184C 0xE1A00003 mov r0, r3 0x40001850 0xE5933000 ldr r3, [r3] 0x40001854 0xE5D42004 ldrb r2, [r4, #4]//берём приоритет одной из задач (одна - выполняемая, вторая - первая в списке на выполнение) 0x40001858 0xE5D33004 ldrb r3, [r3, #4]// вот тут эта вторая 0x4000185C 0xE1520003 cmp r2, r3// сравниваем 0x40001860 0x9A00001C bls 0x400018D8// и БЛЯДЬ выходим не переключаясь если приоритет задачи на выполнение ниже или равен приоритету текущей задачи!!! если сменить 0x40001860 0x9A00001C bls 0x400018D8 на 0x40001860 0x3A00001C bсс 0x400018D8 то у меня три задачки с равными приоритетами спокойно крутятся безо всяких проблем...