@@ -443,49 +443,52 @@ void vClearInterruptMask( __attribute__( ( unused ) ) uint32_t ulMask ) /* __att
443
443
{
444
444
__asm volatile
445
445
(
446
- " .syntax unified \n"
447
- " .extern vPortSVCHandler_C \n"
448
- " .extern vSystemCallEnter \n"
449
- " .extern vSystemCallExit \n"
450
- " .extern pxCurrentTCB \n"
451
- " \n"
452
- " movs r0, #4 \n"
453
- " mov r1, lr \n"
454
- " tst r0, r1 \n"
455
- " beq stack_on_msp \n"
456
- " \n"
457
- " stack_on_psp: \n"
458
- " mrs r0, psp \n"
459
- " b route_svc \n"
460
- " \n"
461
- " stack_on_msp: \n"
462
- " mrs r0, msp \n"
463
- " b route_svc \n"
464
- " \n"
465
- " route_svc: \n"
466
- " ldr r3, [r0, #24] \n"
467
- " subs r3, #2 \n"
468
- " ldrb r2, [r3, #0] \n"
469
- " ldr r3, =%0 \n"
470
- " cmp r2, r3 \n"
471
- " blt system_call_enter \n"
472
- " ldr r3, =%1 \n"
473
- " cmp r2, r3 \n"
474
- " beq system_call_exit \n"
475
- " b vPortSVCHandler_C \n"
476
- " \n"
477
- " system_call_enter: \n"
478
- " push {lr} \n"
479
- " bl vSystemCallEnter \n"
480
- " pop {pc} \n"
481
- " \n"
482
- " system_call_exit: \n"
483
- " push {lr} \n"
484
- " bl vSystemCallExit \n"
485
- " pop {pc} \n"
486
- " \n"
487
- " .align 4 \n"
488
- " \n"
446
+ " .syntax unified \n"
447
+ " .extern vPortSVCHandler_C \n"
448
+ " .extern vSystemCallEnter \n"
449
+ " .extern vSystemCallExit \n"
450
+ " .extern pxCurrentTCB \n"
451
+ " \n"
452
+ " movs r0, #4 \n"
453
+ " mov r1, lr \n"
454
+ " tst r0, r1 \n"
455
+ " beq stack_on_msp \n"
456
+ " \n"
457
+ " stack_on_psp: \n"
458
+ " mrs r0, psp \n"
459
+ " b route_svc \n"
460
+ " \n"
461
+ " stack_on_msp: \n"
462
+ " mrs r0, msp \n"
463
+ " b route_svc \n"
464
+ " \n"
465
+ " route_svc: \n"
466
+ " ldr r3, [r0, #24] \n"
467
+ " subs r3, #2 \n"
468
+ " ldrb r2, [r3, #0] \n"
469
+ " ldr r3, =%0 \n"
470
+ " cmp r2, r3 \n"
471
+ " blt system_call_enter \n"
472
+ " ldr r3, =%1 \n"
473
+ " cmp r2, r3 \n"
474
+ " beq system_call_exit \n"
475
+ " ldr r3, vPortSVCHandler_C_Address \n"
476
+ " bx r3 \n"
477
+ " \n"
478
+ " system_call_enter: \n"
479
+ " push {lr} \n"
480
+ " bl vSystemCallEnter \n"
481
+ " pop {pc} \n"
482
+ " \n"
483
+ " system_call_exit: \n"
484
+ " push {lr} \n"
485
+ " bl vSystemCallExit \n"
486
+ " pop {pc} \n"
487
+ " \n"
488
+ " .ltorg \n"
489
+ " .align 4 \n"
490
+ " vPortSVCHandler_C_Address: .word vPortSVCHandler_C \n"
491
+ " \n"
489
492
: /* No outputs. */
490
493
: "i" ( NUM_SYSTEM_CALLS ), "i" ( portSVC_SYSTEM_CALL_EXIT )
491
494
: "r0" , "r1" , "r2" , "r3" , "memory"
@@ -498,23 +501,27 @@ void vClearInterruptMask( __attribute__( ( unused ) ) uint32_t ulMask ) /* __att
498
501
{
499
502
__asm volatile
500
503
(
501
- " .syntax unified \n"
502
- " .extern vPortSVCHandler_C \n"
503
- " \n"
504
- " movs r0, #4 \n"
505
- " mov r1, lr \n"
506
- " tst r0, r1 \n"
507
- " beq stacking_used_msp \n"
508
- " \n"
509
- " stacking_used_psp: \n"
510
- " mrs r0, psp \n"
511
- " b vPortSVCHandler_C \n"
512
- " \n"
513
- " stacking_used_msp: \n"
514
- " mrs r0, msp \n"
515
- " b vPortSVCHandler_C \n"
516
- " \n"
517
- " .align 4 \n"
504
+ " .syntax unified \n"
505
+ " .extern vPortSVCHandler_C \n"
506
+ " \n"
507
+ " movs r0, #4 \n"
508
+ " mov r1, lr \n"
509
+ " tst r0, r1 \n"
510
+ " beq stacking_used_msp \n"
511
+ " \n"
512
+ " stacking_used_psp: \n"
513
+ " mrs r0, psp \n"
514
+ " ldr r3, vPortSVCHandler_C_Address \n"
515
+ " bx r3 \n"
516
+ " \n"
517
+ " stacking_used_msp: \n"
518
+ " mrs r0, msp \n"
519
+ " ldr r3, vPortSVCHandler_C_Address \n"
520
+ " bx r3 \n"
521
+ " \n"
522
+ " .ltorg \n"
523
+ " .align 4 \n"
524
+ " vPortSVCHandler_C_Address: .word vPortSVCHandler_C \n"
518
525
);
519
526
}
520
527
0 commit comments