Files
kunlun/inc/os_shim/os_task.h
2024-09-28 14:24:04 +08:00

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