171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef OS_SHIM_TASK_H
 | ||
|  | #define OS_SHIM_TASK_H
 | ||
|  | 
 | ||
|  | /* export includes */ | ||
|  | #include "os_task_api.h"
 | ||
|  | #include "iot_system.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define BACKTRACE_DUMP_DEEP_LEN     6
 | ||
|  | typedef struct { | ||
|  |     uint32_t ra; | ||
|  |     uint32_t s0; | ||
|  |     uint32_t stack; | ||
|  | } backtrace_regs_t; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     uint8_t deep_len; | ||
|  |     backtrace_regs_t regs[BACKTRACE_DUMP_DEEP_LEN]; | ||
|  | } backtrace_dump_t; | ||
|  | 
 | ||
|  | /* the pattern of task exception dump */ | ||
|  | #define TCD_PATTERN             0xABCDDCBA
 | ||
|  | /* the max cnt of task crash dump that can be saved into flash */ | ||
|  | #define TCD_TASK_MAX_CNT        7
 | ||
|  | /* the max cnt of task's stack data that can be saved into flash */ | ||
|  | #define TCD_TASK_STACK_MAX_CNT  3
 | ||
|  | 
 | ||
|  | /* The structure size must be an integer multiple of 4 */ | ||
|  | typedef struct tcd_task_info_s { | ||
|  |     char name[30]; | ||
|  |     uint8_t backtrace_cnt; | ||
|  |     uint8_t state; | ||
|  |     uint32_t run_time_counter; | ||
|  |     uint32_t mpec; | ||
|  |     uint32_t stack_base; | ||
|  |     uint32_t sp; | ||
|  | } tcd_task_info_t; | ||
|  | 
 | ||
|  | typedef saved_registers tcd_regs_t; | ||
|  | typedef backtrace_regs_t tcd_backtrace_t; | ||
|  | 
 | ||
|  | typedef struct tcd_task_stack_s { | ||
|  |     uint32_t addr; | ||
|  |     uint32_t len; | ||
|  | } tcd_task_stack_t; | ||
|  | 
 | ||
|  | typedef struct tcd_task_stat_s { | ||
|  |     uint32_t pattern; | ||
|  |     uint32_t layout_offset; | ||
|  |     uint32_t layout_size; | ||
|  |     uint8_t task_max_cnt; | ||
|  |     uint8_t task_stack_max_cnt; | ||
|  |     uint8_t task_cnt; | ||
|  |     uint8_t version_major; | ||
|  |     uint8_t version_minor; | ||
|  |     uint8_t version_micro; | ||
|  |     uint16_t version_build; | ||
|  |     uint32_t run_time; | ||
|  | } tcd_task_stat_t; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_task_systick_cb -  os systick callback function, must be defined | ||
|  |  *                              by IRAM_ATTR | ||
|  |  */ | ||
|  | typedef void (*os_task_systick_cb)(); | ||
|  | 
 | ||
|  | extern backtrace_dump_t g_backtrace_dump; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_start_kernel() - Start the FreeRtos | ||
|  |  */ | ||
|  | void os_start_kernel(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_start_scheduler() - Start the scheduler | ||
|  |  */ | ||
|  | void os_start_scheduler(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_disable_irq() - disable global interrupt | ||
|  |  */ | ||
|  | void os_disable_irq(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_enable_irq() - enable global interrupt | ||
|  |  */ | ||
|  | void os_enable_irq(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_disable_irq_from_isr() - disable global interrupt | ||
|  |  * @return:  The mask that should pass into os_enable_irq_from_isr | ||
|  |  */ | ||
|  | int os_disable_irq_from_isr(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_enable_irq_from_isr() - enable global interrupt | ||
|  |  * @param mask : Mask got from os_disable_irq_from_isr | ||
|  |  */ | ||
|  | void os_enable_irq_from_isr(int mask); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_get_scheduler_state - return OS scheduler's state | ||
|  |  * | ||
|  |  * @return:                1  - not start | ||
|  |  * @return:                0  - started | ||
|  |  */ | ||
|  | int os_get_scheduler_state(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_task_switch_context -  OS's task context switch | ||
|  |  */ | ||
|  | void os_task_switch_context(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_task_crash_get_task_info - Get info of current running task. | ||
|  |  * @param p_buffer : Buffer to store information string. | ||
|  |  * @param m_len : Length of Buffer. | ||
|  |  * | ||
|  |  * @return: The length of string. | ||
|  |  */ | ||
|  | uint32_t os_task_crash_get_task_info(char *p_buffer, uint32_t m_len); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_task_get_crash_info - Get crash info. | ||
|  |  * @param task_cnt : statistical time | ||
|  |  * @param total_run_time : total run time | ||
|  |  * | ||
|  |  * @return: The length of string. | ||
|  |  */ | ||
|  | uint32_t os_task_get_crash_info(uint32_t *total_run_time, uint32_t *run_time); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_task_set_systick_cb - set os systick timer callback | ||
|  |  * @param func : callback function, must be defined by IRAM_ATTR | ||
|  |  * | ||
|  |  * @return:                1  - set systick callback successfully | ||
|  |  * @return:                0  - set systick callback failed | ||
|  |  */ | ||
|  | int os_task_set_systick_cb(os_task_systick_cb func); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief os_set_task_prio_ext() - set priority of a task internally | ||
|  |  * @param handle:           handle of the task to be set | ||
|  |  * @param prio:             task priority | ||
|  |  */ | ||
|  | void os_set_task_prio_ext(os_task_h handle, uint8_t prio); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* OS_SHIM_TASK_H */
 |