기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
quad-core 인 Cortex-a9의 example reset_handler 부분을 보면요.
irq모드의 스택 주소가 1개에요.
4 코어 모두 동일한 주소로 자기의 irq 스택을 설정하는 건데요.
1. irq는 GIC가 분배해주는거라 한순간에 1개의 irq만 처리하기 때문에
따로 동기화를 안해도 되는건가요?
2. irq 말고 data abort나 prefetch abort의 경우는 각 코어별로 서로다른 코드를 실행하더라도 동시에 발생할수있을텐데 이 경우에는 스택주소가 달라야 하지 않을까요?
왜 스택설정을 해주는 코드가 안보일까요. u-boot의 reset핸들러 가봐도 irq는 설정하는것 같은데 나머지는 없네요.
--------------------------------------------------------------
; ------------------------------------------------------------
; Reset Handler - Generic initialization, run by all CPUs
; ------------------------------------------------------------
IMPORT ||Image$$IRQ_STACK$$ZI$$Limit||
IMPORT ||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit||
IMPORT ||Image$$PAGETABLES$$ZI$$Base||
IMPORT enable_branch_prediction
IMPORT invalidate_caches
EXPORT Reset_Handler ; Exported for callgraph purposes!
Reset_Handler PROC
;
; Setup stacks
;---------------
MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
LDR sp, =||Image$$IRQ_STACK$$ZI$$Limit||
MSR CPSR_c, #Mode_SYS:OR:I_Bit:OR:F_Bit ; No interrupts
LDR sp, =||Image$$ARM_LIB_STACKHEAP$$ZI$$Limit||
---------------------------------------------------------------
stack 설정이 같을겁니다.
안그러면 문제가 발생할 가능성도 있어서요.