微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Keil 上从头构建 Cortex M-7 项目?

如何解决如何在 Keil 上从头构建 Cortex M-7 项目?

我正在尝试在不使用任何库(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 举报,一经查实,本站将立刻删除。