windows下zephyr-2.5.0操作系统学习--03-Eclipse-Debug+启动分析

Eclipse-Debug+启动分析

编译生成eclipse工程

在app目录下

west build -b stm32f429i_disc1 -- -G"Eclipse CDT4 - Ninja"

导入eclipse工程并Debug

这里不再记录,百度即可

分析程序入口地址

打开build – zephyr目录 找到zephyr.lst
在前面可以看到:

Disassembly of section rom_start:

08000000 <_vector_table>:
 8000000:	20 08 00 20 81 14 00 08 65 2c 00 08 ad 14 00 08      .. ....e,......
 8000010:	ad 14 00 08 ad 14 00 08 ad 14 00 08 00 00 00 00     ................
	...
 800002c:	dd 12 00 08 ad 14 00 08 00 00 00 00 89 12 00 08     ................
 800003c:	d9 10 00 08                                         ....

08000040 <_irq_vector_table>:
 8000040:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000050:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000060:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000070:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000080:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000090:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000a0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000b0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000c0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000d0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000e0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80000f0:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000100:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000110:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000120:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000130:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000140:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000150:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000160:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000170:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000180:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 8000190:	59 14 00 08 59 14 00 08 59 14 00 08 59 14 00 08     Y...Y...Y...Y...
 80001a0:	59 14 00 08 59 14 00 08 59 14 00 08                 Y...Y...Y...

从这里可以看出当前的向量表地址在0x08000000处,根据ARMv7M的架构手册可以知道:

向量表偏移(4个字节)内容说明
00x20000820复位后的MSP的值
10x08001481Reset异常的入口地址LSB=1表示当前地址处的指令为Thumb指令集
20x08002c65NMI异常的入口地址
3 – 60x080014adHardFault MemManage BusFault UsageFault
7–100保留
110x080012ddSVCall
120x080014adDebug Monitor
130保留
140x08001289PendSV
150x080010d9SysTick
16 – …0x08001459芯片外设中断

从上面整理的异常向量表中可以知道:
1. 程序的入口地址在0x08001480处
2. 系统级别的外设中断都有其自己的处理函数
3. 外设级别的中断入口是统一的入口地址

reset.S 分析

从程序的reset的入口地址处分析程序第一个执行的代码为zephyr/arc/arm/core/aarch32/cortex_m/reset.S

  1. 屏蔽所有外设中断-- basepri 为0x10
  2. 设置PSP并使用PSP为boot的栈指针
  3. 执行z_arm_prep_c函数-- zeyphr/arc/arm/core/aarch32/prep_c.c

prep_c.c c环境的准备

  1. 重定向向量表,这里仍然定位为0x08000000
  2. 初始化bss段
  3. 初始化数据段
  4. 中断初始化,初始化所有中断优先级
  5. 执行z_cstart函数 – zephyr/kernel/init.c

init.c

  1. 内核初始化–架构相关
  2. 硬件初始化–_SYS_INIT_LEVEL_PRE_KERNEL_1级别
    • soc.c里的init
    • clock_stm32_ll_common.c中的 stm32_clock_control_init()
    • intc_exti_stm32.c中的stm32_exti_init() 初始化exti中断
    • uart_stm32.c中的uart_stm32_init() 初始化uart外设
    • uart_console.c中的uart_console_init() 初始化uart_console
  3. 硬件初始化 _SYS_INIT_LEVEL_PRE_KERNEL_2级别
    • cortex_m_systick.c中的z_clock_driver_init() 初始化systick
    • gpio_stm32.c中的gpio_stm32_afio_init()
  4. prepare_multithreading()
  5. switch_to_main_thread()
drawing
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Berte_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值