打印
[开发工具]

keil没有__main函数

[复制链接]
753|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
__main函数似乎是keil编译器自动生成,用来初始化堆栈的函数?是不是只要有main.c就会自动生成__main函数呢?但是系统报错了,说未定义的类型,不知道问题在哪啊……请各位大神指点

39012624c126b1ffe2.png (217.67 KB )

39012624c126b1ffe2.png

使用特权

评论回复
沙发
tail066| | 2022-4-7 08:53 | 只看该作者
你用的什么,怎么会自动生成呢

使用特权

评论回复
板凳
云时雨|  楼主 | 2022-4-7 13:55 | 只看该作者
tail066 发表于 2022-4-7 08:53
你用的什么,怎么会自动生成呢

是用keil进行纯软件仿真,keil是keil5的版本,芯片是ARM公司的cortex_M0,但是编译没法通过,我猜可能是启动文件里面有问题……看实例都是直接在启动文件中写跳转到__main函数,请问__main函数是需要自己写吗?

使用特权

评论回复
地板
云时雨|  楼主 | 2022-4-7 13:57 | 只看该作者
附咱写的启动文件
;<h> Stack Configuration
;<o>  Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size  EQU  0x00000200            
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem   SPACE Stack_Size
__initial_sp
;初始化栈

;<h> Heap Configuration
;<o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size   EQU  0x00000300
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem    SPACE Heap_Size
_heap_limit                             

PRESERVE8
THUMB

            AREA RESET, DATA, READONLY
                        EXPORT __Vectors
__Vectors          DCD  __initial_sp           ;Top of Stack
                        DCD  Reset_Handler         ;Reset Handler  
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  0
                        DCD  WATL_1                ;IRQ0 Handler
                        DCD  WATL_2                ;IRQ1 Handler
                        DCD  WATL_3                ;IRQ2 Handler



                        AREA  |.text|, CODE, READONLY

Reset_Handler      PROC
                          GLOBAL Reset_Handler
                          ENTRY
                          IMPORT __main
                          LDR R0, = __main
                          BX R0
                          ENDP
                                  
WATL_1               PROC
                          EXPORT WATL_1 [WEAK]
                          IMPORT WAL1
                          PUSH {R0,R1,R2,LR}
                          BL WAL1
                          POP  {R0,R1,R2,PC}
                          ENDP
                                  
WATL_2               PROC
                          EXPORT WATL_2  [WEAK]
                          IMPORT WAL2
                          PUSH{R0,R1,R2,LR}
                          BL WAL2
                          POP{R0,R1,R2,PC}
                          ENDP
                                  
WATL_3               PROC
                          EXPORT WATL_3  [WEAK]
                          IMPORT WAL3
                          PUSH{R0,R1,R2,LR}
                          BL WAL3
                          POP{R0,R1,R2,PC}
                          ENDP
;接下来为初始化堆栈,系统自动处理         

            ALIGN 4

                IF :DEF:__MICROLIB
                EXPORT __initial_sp
                EXPORT __heap_base
                EXPORT __Heap_limit

                ELSE
                IMPORT __use_two_region_memory
                EXPORT __user_initial_stackheap

__user_initial_stackheap
                LDR R0, = Heap_Mem
                LDR R1, =(Stack_Mem + Stack_Size)
                LDR R2, =(Heap_Mem + Heap_Size)
                LDR R3, =Stack_Mem
                BX LR
               
                       
                ALIGN
                ENDIF
                END

使用特权

评论回复
5
香水城| | 2022-4-7 14:09 | 只看该作者
__main()函數是不用自己寫的,是編譯器自動生成的,它在執行用戶main()之前被調用。

使用特权

评论回复
6
香水城| | 2022-4-7 14:09 | 只看该作者
__main()函數是不用自己寫的,是編譯器自動生成的,它在執行用戶main()之前被調用。

使用特权

评论回复
7
云时雨|  楼主 | 2022-4-7 15:20 | 只看该作者
香水城 发表于 2022-4-7 14:09
__main()函數是不用自己寫的,是編譯器自動生成的,它在執行用戶main()之前被調用。 ...

好像是这样的,但编译器还是报错了,说__main没有定义,不清楚问题出在哪里……

使用特权

评论回复
8
tail066| | 2022-4-8 17:31 | 只看该作者
没用过纯软件仿真,
一直觉得那个不靠谱

使用特权

评论回复
9
云时雨|  楼主 | 2022-4-12 20:12 | 只看该作者
经过排查,结果竟然是
开始选择芯片时选错了,没有选到具体的芯片cortex M0而选了一个M0的类,所以keil找不到芯片,无法初始化
震惊,此贴完结,供参考

使用特权

评论回复
10
jcky001| | 2022-4-13 09:30 | 只看该作者
原来是芯片选错了

使用特权

评论回复
11
asmine| | 2022-4-16 14:45 | 只看该作者
怎么还有个横杠

使用特权

评论回复
12
tpgf| | 2022-5-3 10:06 | 只看该作者
看着像是汇编程序啊

使用特权

评论回复
13
木木guainv| | 2022-5-3 10:12 | 只看该作者
这个错误 那应该是不能识别芯片啊

使用特权

评论回复
14
磨砂| | 2022-5-3 10:22 | 只看该作者
难道下载的时候不报错吗

使用特权

评论回复
15
晓伍| | 2022-5-3 10:34 | 只看该作者
尽量不要犯这样的错误

使用特权

评论回复
16
八层楼| | 2022-5-3 10:43 | 只看该作者
跟代码没有关系

使用特权

评论回复
17
观海| | 2022-5-3 10:54 | 只看该作者
这种错误很容易出现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝