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 */
 |