问题描述
我正在尝试在不使用任何库(CMSIS、HAL...)的情况下使用 Keil 做一个项目,并在 Atmel/microchip 评估板 SAMv71 Xplained Ultra 上构建它。
我在这里阅读了不同的帖子,但我仍然很迷茫,我已经看到使用 arm gcc/gnu 工具链的大多数答案,但似乎我不能在这里应用它。 但是,我尝试创建一个 startup.s 文件和一个可以加载到板上的小程序,但是出现了多个错误,我没有解决这些问题的想法。
我的小程序
typedef unsigned long uint32_t;
int main ()
{
volatile int ii,a;
for(ii=0;ii<10;ii++) {
a = ii+2;
}
*((uint32_t *)0x40E00018) = 0x87654321;
return 0;
}
startup.s
Stack_Size EQU 0x00000400
AREA STACK,NOINIT,READWRITE,ALIGN=3
__stack_limit
Stack_Mem SPACE Stack_Size
__initial_sp
Heap_Size EQU 0x00000200
AREA HEAP,ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
AREA RESET,DATA,READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD Memmanage_Handler ; mpu Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|,CODE,READONLY
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
LDR R0,=__main
BX R0
ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B .
ENDP
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
Memmanage_Handler\
PROC
EXPORT Memmanage_Handler [WEAK]
B .
ENDP
BusFault_Handler\
PROC
EXPORT BusFault_Handler [WEAK]
B .
ENDP
UsageFault_Handler\
PROC
EXPORT UsageFault_Handler [WEAK]
B .
ENDP
SVC_Handler PROC
EXPORT SVC_Handler [WEAK]
B .
ENDP
DebugMon_Handler\
PROC
EXPORT DebugMon_Handler [WEAK]
B .
ENDP
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
ALIGN
; User Initial Stack & Heap
IF :DEF:__MICROLIB
EXPORT __stack_limit
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap PROC
LDR R0,= Heap_Mem
LDR R1,=(Stack_Mem + Stack_Size)
LDR R2,= (Heap_Mem + Heap_Size)
LDR R3,= Stack_Mem
BX LR
ENDP
ALIGN
ENDIF
END
这是我使用调试器 Fault report
时可见的故障报告有人知道如何解决这些问题吗? 此外,我不确定我是否走在正确的道路上,所以我很乐意接受任何建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)