From 133d15abce50f03a0cbdc4b4d3bde8eb828d84d7 Mon Sep 17 00:00:00 2001 From: armink Date: Wed, 28 Dec 2016 15:53:47 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E3=80=90=E5=A2=9E=E5=8A=A0=E3=80=91S?= =?UTF-8?q?TM32F10X=20=E8=A3=B8=E6=9C=BA=E5=B9=B3=E5=8F=B0=20Demo=20?= =?UTF-8?q?=E7=9A=84=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: armink --- demo/non_os/stm32f10x/README.md | 52 +++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/demo/non_os/stm32f10x/README.md b/demo/non_os/stm32f10x/README.md index 1e9d682..7f0b2aa 100644 --- a/demo/non_os/stm32f10x/README.md +++ b/demo/non_os/stm32f10x/README.md @@ -1,5 +1,53 @@ # stm32f10x non-os Demo ---- +## STEP 1 -马上就来…… \ No newline at end of file +文件夹 `RVMDK` 下为 Keil 工程,`EMARM` 下为 IAR 工程。打开工程后,在 `app/src/app.c` 中有 `fault_test_by_unalign()` 及 `fault_test_by_div0()` 两个 HardFault 测试函数,可以选择性的执行测试函数。 + +## STEP 2 + +将程序下载至开发板,并将其串口1 与电脑串口连接。 + +## STEP 3 + +电脑上打开该串口,串口配置 115200 8 1 N ,给开发板上电,即可看到类似如下的输出信息,故障原因也已被准确的诊断出来: + +``` +Firmware name: CmBacktrace, hardware version: V1.0.0, software version: V0.1.0 +Fault on interrupt or bare metal(no OS) environment +====== Main stack information ====== + addr: 20001140 data: 00000000 + addr: 20001144 data: e000ed14 + addr: 20001148 data: 0000000a + addr: 2000114c data: 00000000 + addr: 20001150 data: a046ac2b + addr: 20001154 data: 08000145 + addr: 20001158 data: e000ed14 + addr: 2000115c data: 08003143 +==================================== +=================== Registers information ==================== + R0 : 00000000 R1 : 200012ec R2 : 00000000 R3 : 00000000 + R12: 00008080 LR : 08000145 PC : 08000a60 PSR: 61000000 +============================================================== +Usage fault is caused by Indicates a divide by zero has taken place (can be set only if DIV_0_TRP is set) +Show more call stack info by run: addr2line -e CmBacktrace.out -a -f 08000a60 08000141 0800313f +``` + +## STEP 4 + +打开电脑上的命令行工具,进入项目工程的可执行文件所在路径(Keil 一般在 `Output` 下,可执行文件后缀 `.axf`;IAR 一般在 ` Exe` 下,可执行文件后缀 `.out`),将 STEP 3 最后输出的 `addr2line -e CmBacktrace.out -a -f 08000a60 08000141 0800313f` 拷贝至控制台,并执行([点击查看 addr2line 工具的使用教程](https://github.com/armink/CmBacktrace/blob/master/docs/zh/how%20to%20use%20addr2line%20for%20call%20stack.md)),可看到类似如下,包含函数名称及代码行号的函数调用栈信息: + +``` +D:\Program\STM32\CmBacktrace\demo\non_os\stm32f10x\EWARM\stm32f103xE\Exe>addr2line -e CmBacktrace.out -a -f 08000a60 08000141 0800313f +0x08000a60 +fault_test_by_div0 +D:\Program\STM32\CmBacktrace\demo\non_os\stm32f10x\app\src/fault_test.c:38 +0x08000141 +main +D:\Program\STM32\CmBacktrace\demo\non_os\stm32f10x\app\src/app.c:20 +0x0800313f +_call_main +??:? + +D:\Program\STM32\CmBacktrace\demo\non_os\stm32f10x\EWARM\stm32f103xE\Exe> +```