WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
exception.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2018-2020. All rights reserved.
3 * Description:HAL UTILS INTERFACE
4 */
5
6#ifndef EXCEPTION_H
7#define EXCEPTION_H
8
9#include <stdint.h>
10#include "platform.h"
11#include "errcode.h"
12
13#if (ARCH == RISCV31) || (ARCH == RISCV70)
14#include "vectors.h"
15#endif
16
21#define WAIT_APPS_DUMP_DELAY_MS_EACH_TIME 16000U
22#define WAIT_APPS_DUMP_DELAY_TIMES 2
23#define WAIT_APPS_REFRESH_FLASH_MS 2000
24
25#define EXCEP_INFO_FOR_R4_TO_R11 8
26#ifndef LOSCFG_EXC_SIMPLE_INFO
27#if defined(__LITEOS__)
28#define EXC_INFO_SAVE_TP_INDEX 16
29#endif
30#if defined(__FREERTOS__)
31#if CORE == WIFI
32#define EXC_INFO_SAVE_TP_INDEX 9
33#else
34#define EXC_INFO_SAVE_TP_INDEX 8
35#endif
36#endif
37#else
38#define EXC_INFO_SAVE_X4_INDEX 15
39#endif
40
52
83
88typedef struct stack_frame_t {
89 unsigned long stacked_r0;
90 unsigned long stacked_r1;
91 unsigned long stacked_r2;
92 unsigned long stacked_r3;
93 unsigned long stacked_r12;
94 unsigned long stacked_lr;
95 unsigned long stacked_pc;
96 unsigned long stacked_psr;
98
99typedef struct excep_info_t {
100#if (ARCH == CM3) || (ARCH == CM7)
101 unsigned long regs[EXCEP_INFO_FOR_R4_TO_R11]; // r4-r11
102#endif
103 unsigned long sp;
104 unsigned long sp_bottom;
105 unsigned long exp_task_id;
106 unsigned long task_array;
107 unsigned long task_max_num;
109
110#if (ARCH == CM7)
111typedef struct {
112#ifdef LOSCFG_ARCH_FPU_ENABLE
113 uint32_t s16;
114 uint32_t s17;
115 uint32_t s18;
116 uint32_t s19;
117 uint32_t s20;
118 uint32_t s21;
119 uint32_t s22;
120 uint32_t s23;
121 uint32_t s24;
122 uint32_t s25;
123 uint32_t s26;
124 uint32_t s27;
125 uint32_t s28;
126 uint32_t s29;
127 uint32_t s30;
128 uint32_t s31;
129#endif
130 uint32_t r4;
131 uint32_t r5;
132 uint32_t r6;
133 uint32_t r7;
134 uint32_t r8;
135 uint32_t r9;
136 uint32_t r10;
137 uint32_t r11;
138 uint32_t primask;
139 uint32_t sp;
140 uint32_t r0;
141 uint32_t r1;
142 uint32_t r2;
143 uint32_t r3;
144 uint32_t r12;
145 uint32_t lr;
146 uint32_t pc;
147 uint32_t xpsr;
148#ifdef LOSCFG_ARCH_FPU_ENABLE
149 uint32_t s0;
150 uint32_t s1;
151 uint32_t s2;
152 uint32_t s3;
153 uint32_t s4;
154 uint32_t s5;
155 uint32_t s6;
156 uint32_t s7;
157 uint32_t s8;
158 uint32_t s9;
159 uint32_t s10;
160 uint32_t s11;
161 uint32_t s12;
162 uint32_t s13;
163 uint32_t s14;
164 uint32_t s15;
165 uint32_t fpscr;
166 uint32_t no_name;
167#endif
169
170typedef struct {
171 uint16_t phase;
172 uint16_t type;
173 uint32_t fault_addr;
175 uint16_t nest_cnt;
176 uint16_t reserved;
178} exc_info_t;
179
180#endif
181#if (ARCH == RISCV31) || (ARCH == RISCV70)
182#ifdef SUPPORT_CALLSTACK
183typedef struct {
184 uint32_t ra;
185 uint32_t fp;
187#else
188typedef struct {
189 uint32_t sp_addr;
190 uint32_t sp_content;
192#endif
193
194#if defined(__LITEOS__)
195typedef struct {
196 char task_name[16];
197 uint32_t thrd_pid;
198 uint16_t type;
199 uint16_t nest_cnt;
200#ifndef LOSCFG_EXC_SIMPLE_INFO
201 char phase[8];
202#else
203 uint16_t phase;
204 uint16_t ret;
205#endif
206 uint32_t ccause;
207 uint32_t mcause;
208 uint32_t mtval;
209 uint32_t gp;
210 uint32_t mstatus;
211 uint32_t mepc;
212 uint32_t ra;
213 uint32_t sp;
214#ifndef LOSCFG_EXC_SIMPLE_INFO
215 uint32_t tp;
216 uint32_t t0;
217 uint32_t t1;
218 uint32_t t2;
219 uint32_t s0;
220 uint32_t s1;
221 uint32_t a0;
222 uint32_t a1;
223 uint32_t a2;
224 uint32_t a3;
225 uint32_t a4;
226 uint32_t a5;
227 uint32_t a6;
228 uint32_t a7;
229 uint32_t s2;
230 uint32_t s3;
231 uint32_t s4;
232 uint32_t s5;
233 uint32_t s6;
234 uint32_t s7;
235 uint32_t s8;
236 uint32_t s9;
237 uint32_t s10;
238 uint32_t s11;
239 uint32_t t3;
240 uint32_t t4;
241 uint32_t t5;
242 uint32_t t6;
243#else
244 uint32_t x4;
245 uint32_t x5;
246 uint32_t x6;
247 uint32_t x7;
248 uint32_t x8;
249 uint32_t x9;
250 uint32_t x10;
251 uint32_t x11;
252 uint32_t x12;
253 uint32_t x13;
254 uint32_t x14;
255 uint32_t x15;
256 uint32_t x16;
257 uint32_t x17;
258 uint32_t x18;
259 uint32_t x19;
260 uint32_t x20;
261 uint32_t x21;
262 uint32_t x22;
263 uint32_t x23;
264 uint32_t x24;
265 uint32_t x25;
266 uint32_t x26;
267 uint32_t x27;
268 uint32_t x28;
269 uint32_t x29;
270 uint32_t x30;
271 uint32_t x31;
272#endif
273#ifdef SUPPORT_CALLSTACK
274 uint32_t stack_size;
275 exc_stack_info_t stack[0];
276#else
279#endif
281#define EXC_INFO_SAVE_SIZE sizeof(exc_info_save_t)
282#endif
283
284#if defined(__FREERTOS__)
285typedef struct {
286 uint16_t uw_exc_type;
287 uint16_t ret;
288 uint32_t mepc;
289 uint32_t mstatus;
290 uint32_t mtval;
291 uint32_t mcause;
292#if CORE == WIFI
293 uint32_t cxcptsc;
294#endif
295 uint32_t ra;
296 uint32_t sp;
297 uint32_t gp;
298 uint32_t tp;
299 uint32_t t0;
300 uint32_t t1;
301 uint32_t t2;
302 uint32_t s0;
303 uint32_t s1;
304 uint32_t a0;
305 uint32_t a1;
306 uint32_t a2;
307 uint32_t a3;
308 uint32_t a4;
309 uint32_t a5;
310 uint32_t a6;
311 uint32_t a7;
312 uint32_t s2;
313 uint32_t s3;
314 uint32_t s4;
315 uint32_t s5;
316 uint32_t s6;
317 uint32_t s7;
318 uint32_t s8;
319 uint32_t s9;
320 uint32_t s10;
321 uint32_t s11;
322 uint32_t t3;
323 uint32_t t4;
324 uint32_t t5;
325 uint32_t t6;
326#ifdef SUPPORT_CALLSTACK
327 uint32_t stack_size;
328 exc_stack_info_t stack[0];
329#endif
331#define EXC_INFO_SAVE_SIZE sizeof(exc_info_save_t)
332#endif
333#endif
334#if (ARCH == CM3) || (ARCH == CM7)
335typedef struct {
336 uint32_t lr;
337 uint32_t fp;
339typedef struct {
340 char task_name[16];
341 uint32_t task_id;
344 char phase[22];
345 uint16_t type;
346 uint32_t fault_addr;
348 uint32_t r0;
349 uint32_t r1;
350 uint32_t r2;
351 uint32_t r3;
352 uint32_t r4;
353 uint32_t r5;
354 uint32_t r6;
355 uint32_t r7;
356 uint32_t r8;
357 uint32_t r9;
358 uint32_t r10;
359 uint32_t r11;
360 uint32_t r12;
361 uint32_t pri_mask;
362 uint32_t sp;
363 uint32_t lr;
364 uint32_t pc;
365 uint32_t xpsr;
366 uint32_t psp;
367 uint32_t pri_mask_scb;
368 uint32_t fault_mask;
369 uint32_t base_pri;
370 uint32_t control;
371 uint32_t scb_icsr;
372 uint32_t scb_scr;
373 uint32_t scb_shcsr;
374 uint32_t scb_cfsr;
375 uint32_t scb_hfsr;
376 uint32_t scb_dfsr;
377 uint32_t scb_mmfar;
378 uint32_t scb_bfsr;
379 uint32_t scb_afsr;
380#ifdef LOSCFG_BACKTRACE
381 uint32_t stack_size;
382 exc_stack_info_t stack[0];
383#endif
385#define EXC_INFO_SAVE_SIZE sizeof(exc_info_save_t)
386#endif
390#if (ARCH == RISCV31) || (ARCH == RISCV70)
391typedef void (*nmi_proc_func)(exc_context_t *);
392typedef void (*hal_exception_dump_callback)(uint32_t irq_id, exc_context_t *exc_buf_addr);
393#else
394typedef void (*hal_exception_dump_callback)(uint32_t id, uint32_t reason, uint32_t addr, exc_info_t *exc_info);
395#endif
396
402#if (ARCH == RISCV31) || (ARCH == RISCV70)
403void do_hard_fault_handler(exc_context_t *exc_buf_addr);
404#if defined(__LITEOS__)
405void do_fault_handler(uint32_t exc_type, exc_context_t *exc_buff_addr);
406#endif
407#if defined(__FREERTOS__)
408void do_fault_handler_freertos(void);
409#endif
410#elif (ARCH == CM7)
417void do_hard_fault_handler(uint32_t exc_info, exc_content_t *context);
418#endif
419
425
433
439
440#ifdef CONFIG_SUPPORT_CRASHINFO_SAVE_TO_FLASH
441void crashinfo_save(exc_context_t *exc_buf_addr);
442bool crashinfo_status_get(void);
443void crashinfo_dump(void);
444void crashinfo_clr(void);
445#endif
446
447#if (ARCH == RISCV31) || (ARCH == RISCV70)
448#ifndef SUPPORT_CALLSTACK
449void back_trace(uint32_t fp);
450#endif
451#ifndef USE_CMSIS_OS
452void do_trap_unknown(exc_context_t *exc_buff_addr);
453void do_trap_insn_misaligned(exc_context_t *exc_buff_addr);
454void do_trap_insn_fault(exc_context_t *exc_buff_addr);
455void do_trap_insn_illegal(exc_context_t *exc_buff_addr);
456void do_trap_load_misaligned(exc_context_t *exc_buff_addr);
457void do_trap_load_fault(exc_context_t *exc_buff_addr);
458void do_trap_store_misaligned(exc_context_t *exc_buff_addr);
459void do_trap_store_fault(exc_context_t *exc_buff_addr);
460void do_trap_ecall_u(exc_context_t *exc_buff_addr);
461void do_trap_ecall_s(exc_context_t *exc_buff_addr);
462void do_trap_ecall_m(exc_context_t *exc_buff_addr);
463void do_trap_break(exc_context_t *exc_buff_addr);
464void do_insn_page_fault(exc_context_t *exc_buff_addr);
465void do_load_page_fault(exc_context_t *exc_buff_addr);
466void do_store_page_fault(exc_context_t *exc_buff_addr);
467void do_hard_fault(exc_context_t *exc_buff_addr);
468void do_lockup(exc_context_t *exc_buff_addr);
469void default_handler(void);
470void nmi_handler(void);
471#endif
472
473#ifdef SAVE_EXC_INFO
474#if CONFIG_DFX_SUPPORT_FILE_SYSTEM == DFX_YES
479int32_t exc_info_write(const char *path, uint32_t offset, const uint8_t *buf, uint32_t size);
480#endif
481#ifdef CFG_DRIVERS_MMC
486errcode_t emmc_exc_info_write(void);
487#endif
488#endif
489#endif
490
494#endif
uint32_t errcode_t
Definition of error code.
Definition errcode.h:30
void default_handler(void)
Default handler process.
void back_trace(uint32_t fp)
Definition exception_riscv.c:335
void do_hard_fault_handler(exc_context_t *exc_buf_addr)
Prototype for the assembly language hard-fault handler. This will setup the stack and attempt to gene...
Definition exception_riscv.c:1008
#define EXCEP_INFO_FOR_R4_TO_R11
Definition exception.h:25
void hal_register_exception_dump_callback(hal_exception_dump_callback callback)
Register the exception dump callback
Definition exception_riscv.c:1153
IRQ_ID_FAULT_TYPE_ENMU
Definition exception.h:56
void do_fault_handler(uint32_t exc_type, exc_context_t *exc_buff_addr)
Definition exception_riscv.c:1146
struct excep_info_t exception_info_t
struct stack_frame_t exception_stack_frame_t
Structure which is pushed onto the stack by the Cortex-M0 during exception processing - stack frame.
void(* nmi_proc_func)(exc_context_t *)
Callback to output the exception information.
Definition exception.h:391
INT_ID_FAULT_TYPE_ENUM
Definition exception.h:41
void wait_apps_prepare_for_rebooting(void)
Wait for the apps to finish the preparing for rebooting. eg. notify the apps and finish coredump if t...
Definition exception_riscv.c:412
void hal_save_exception_reset_info(void)
Save the exception reset information for debug after the restart.
void(* hal_exception_dump_callback)(uint32_t irq_id, exc_context_t *exc_buf_addr)
Definition exception.h:392
@ IRQ_ID_LOAD_PAGE_FAULT
Definition exception.h:70
@ IRQ_ID_LOAD_ADDERSS_MISALIGNED
Definition exception.h:61
@ IRQ_ID_STORE_OR_AMO_PAGE_FAULT
Definition exception.h:72
@ IRQ_ID_STORE_OR_AMO_ACCESS_FALUT
Definition exception.h:64
@ IRQ_ID_NMI_INTERRUPT
Definition exception.h:76
@ IRQ_ID_INSTRUCTION_ADDRESS_MISALIGNED
Definition exception.h:57
@ IRQ_ID_STORE_OR_AMO_ADDRESS_MISALIGNED
Definition exception.h:63
@ IRQ_ID_INSTRUCTION_PAGE_FAULT
Definition exception.h:69
@ IRQ_ID_RESERVED_0
Definition exception.h:67
@ IRQ_ID_RESERVED_1
Definition exception.h:71
@ IRQ_ID_ILLEGAL_INSTRUCTION
Definition exception.h:59
@ IRQ_ID_ENVIRONMENT_CALL_FROM_UMODE
Definition exception.h:65
@ IRQ_ID_ENVIRONMENT_CALL_FROM_MMODE
Definition exception.h:68
@ IRQ_ID_ENVIRONMENT_CALL_FROM_SMODE
Definition exception.h:66
@ IRQ_ID_ASYNCHRONOUS_EXCEPTION
Definition exception.h:75
@ IRQ_ID_BREAKPOINT
Definition exception.h:60
@ IRQ_ID_INSTRUCTION_ACCESS_FAULT
Definition exception.h:58
@ IRQ_ID_LOAD_ACCESS_FAULT
Definition exception.h:62
@ INT_ID_WATCHDOG_FAULT
Definition exception.h:48
@ INT_ID_NMI_FAULT
Definition exception.h:42
@ INT_ID_CHIP_WATCHDOG_FAULT
Definition exception.h:47
@ INT_ID_HARD_FAULT
Definition exception.h:43
@ INT_ID_USAGE_FAULT
Definition exception.h:46
@ INT_ID_BUS_FAULT
Definition exception.h:45
@ INT_ID_INDEX_BUTT
Definition exception.h:50
@ INT_ID_MEM_FAULT
Definition exception.h:44
osal_u8 type
Definition oal_net.h:0
Definition exception.h:188
uint32_t sp_addr
Definition exception.h:189
uint32_t sp_content
Definition exception.h:190
Definition exception.h:111
uint32_t r2
Definition exception.h:142
uint32_t r6
Definition exception.h:132
uint32_t r0
Definition exception.h:140
uint32_t r10
Definition exception.h:136
uint32_t r11
Definition exception.h:137
uint32_t primask
Definition exception.h:138
uint32_t r12
Definition exception.h:144
uint32_t r8
Definition exception.h:134
uint32_t r1
Definition exception.h:141
uint32_t r4
Definition exception.h:130
uint32_t xpsr
Definition exception.h:147
uint32_t r5
Definition exception.h:131
uint32_t pc
Definition exception.h:146
uint32_t r7
Definition exception.h:133
uint32_t lr
Definition exception.h:145
uint32_t sp
Definition exception.h:139
uint32_t r3
Definition exception.h:143
uint32_t r9
Definition exception.h:135
Definition vectors.h:229
Definition exception.h:195
uint32_t backtrace_size
Definition exception.h:277
uint32_t scb_icsr
Definition exception.h:371
uint32_t t6
Definition exception.h:242
uint32_t r0
Definition exception.h:348
uint32_t int_num_or_task_id
Definition exception.h:347
uint32_t mstatus
Definition exception.h:210
uint32_t r7
Definition exception.h:355
uint32_t pc
Definition exception.h:364
uint32_t t4
Definition exception.h:240
uint32_t s9
Definition exception.h:236
uint32_t ccause
Definition exception.h:206
uint32_t task_id
Definition exception.h:341
uint32_t t1
Definition exception.h:217
uint32_t r10
Definition exception.h:358
uint32_t scb_scr
Definition exception.h:372
uint32_t r11
Definition exception.h:359
uint32_t r1
Definition exception.h:349
uint32_t r6
Definition exception.h:354
uint32_t s6
Definition exception.h:233
uint32_t t2
Definition exception.h:218
uint32_t a2
Definition exception.h:223
uint32_t s0
Definition exception.h:219
uint32_t a0
Definition exception.h:221
uint32_t lr
Definition exception.h:363
uint16_t nest_cnt
Definition exception.h:199
uint32_t a7
Definition exception.h:228
uint32_t a4
Definition exception.h:225
uint32_t a1
Definition exception.h:222
uint32_t fault_addr
Definition exception.h:346
uint32_t scb_dfsr
Definition exception.h:376
uint32_t scb_bfsr
Definition exception.h:378
uint32_t scb_cfsr
Definition exception.h:374
uint32_t mcause
Definition exception.h:207
uint32_t r3
Definition exception.h:351
uint32_t mtval
Definition exception.h:208
uint32_t control
Definition exception.h:370
uint32_t s2
Definition exception.h:229
uint32_t ra
Definition exception.h:212
uint32_t a3
Definition exception.h:224
uint32_t scb_hfsr
Definition exception.h:375
uint32_t s5
Definition exception.h:232
uint32_t base_pri
Definition exception.h:369
uint32_t r9
Definition exception.h:357
uint32_t tp
Definition exception.h:215
uint32_t fault_mask
Definition exception.h:368
uint32_t system_mem_addr
Definition exception.h:343
uint32_t r8
Definition exception.h:356
uint32_t a5
Definition exception.h:226
uint32_t t0
Definition exception.h:216
uint32_t psp
Definition exception.h:366
uint32_t scb_shcsr
Definition exception.h:373
uint32_t s10
Definition exception.h:237
uint32_t mepc
Definition exception.h:211
uint32_t scb_mmfar
Definition exception.h:377
uint32_t r2
Definition exception.h:350
uint32_t thrd_pid
Definition exception.h:197
uint32_t scb_afsr
Definition exception.h:379
uint32_t s4
Definition exception.h:231
uint16_t type
Definition exception.h:198
uint32_t pri_mask
Definition exception.h:361
uint32_t gp
Definition exception.h:209
uint32_t s1
Definition exception.h:220
uint32_t r5
Definition exception.h:353
uint32_t pri_mask_scb
Definition exception.h:367
uint32_t s8
Definition exception.h:235
uint32_t a6
Definition exception.h:227
uint32_t xpsr
Definition exception.h:365
uint32_t t3
Definition exception.h:239
uint32_t r12
Definition exception.h:360
uint32_t s11
Definition exception.h:238
uint32_t r4
Definition exception.h:352
uint32_t t5
Definition exception.h:241
uint32_t sp
Definition exception.h:213
uint32_t s7
Definition exception.h:234
uint32_t task_stack_size
Definition exception.h:342
uint32_t s3
Definition exception.h:230
Definition exception.h:170
uint32_t intnum_or_taskid
Definition exception.h:174
exc_content_t * context
Definition exception.h:177
uint16_t type
Definition exception.h:172
uint16_t phase
Definition exception.h:171
uint16_t nest_cnt
Definition exception.h:175
uint16_t reserved
Definition exception.h:176
uint32_t fault_addr
Definition exception.h:173
Definition vectors.h:237
Definition exception.h:335
uint32_t fp
Definition exception.h:337
uint32_t lr
Definition exception.h:336
Definition exception.h:99
unsigned long task_array
Definition exception.h:106
unsigned long sp_bottom
Definition exception.h:104
unsigned long regs[8]
Definition exception.h:101
unsigned long exp_task_id
Definition exception.h:105
unsigned long task_max_num
Definition exception.h:107
unsigned long sp
Definition exception.h:103
Structure which is pushed onto the stack by the Cortex-M0 during exception processing - stack frame.
Definition exception.h:88
unsigned long stacked_pc
Definition exception.h:95
unsigned long stacked_r1
Definition exception.h:90
unsigned long stacked_psr
Definition exception.h:96
unsigned long stacked_r12
Definition exception.h:93
unsigned long stacked_r2
Definition exception.h:91
unsigned long stacked_r0
Definition exception.h:89
unsigned long stacked_lr
Definition exception.h:94
unsigned long stacked_r3
Definition exception.h:92