This commit is contained in:
huxi
2025-12-03 11:12:34 +08:00
parent c23ae4f24c
commit bc195654bf
8163 changed files with 3799544 additions and 92 deletions
+445
View File
@@ -0,0 +1,445 @@
#ifndef OS_API_H
#define OS_API_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "generic/typedef.h"
#include "os/os_cpu.h"
#include "os/os_error.h"
#include "os/os_type.h"
typedef void *TaskHandle_t;
/* --------------------------------------------------------------------------*/
/**
* @brief reserved
*/
/* ----------------------------------------------------------------------------*/
void os_init(void);
/* --------------------------------------------------------------------------*/
/**
* @brief reserved
*/
/* ----------------------------------------------------------------------------*/
void os_start(void);
/* --------------------------------------------------------------------------*/
/**
* @brief reserved
*/
/* ----------------------------------------------------------------------------*/
void os_init_tick(int);
/* --------------------------------------------------------------------------*/
/**
* @brief 创建任务
*
* @param task 任务回调函数
* @param p_arg 传递给任务回调函数的参数
* @param prio 任务的优先级
* @param stksize 任务的堆栈大小, 单位(u32)
* @param qsize 任务的queue大小,单位(byte)
* @param name 任务名 (名字长度不能超过configMAX_TASK_NAME_LEN字节)
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_task_create(void (*task)(void *p_arg),
void *p_arg,
u8 prio,
u32 stksize,
int qsize,
const char *name);
int os_task_create_affinity_core(void (*task)(void *p_arg),
void *p_arg,
u8 prio,
u32 stksize,
int qsize,
const char *name,
u8 core);
/* --------------------------------------------------------------------------*/
/**
* @brief 获取当前任务名
*
* @return 当前任务名
*/
/* ----------------------------------------------------------------------------*/
const char *os_current_task();
/* --------------------------------------------------------------------------*/
/**
* @brief 删除任务
*
* @param name 任务名
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_task_del_req(const char *name);
/* --------------------------------------------------------------------------*/
/**
* @brief 响应任务删除请求,标记资源已经释放,可以删除当前任
*
* @param name 任务名,任务自己可以用OS_TASK_SELF
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_task_del_res(const char *name);
/* --------------------------------------------------------------------------*/
/**
* @brief 删除任务
*
* @param name 任务名
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_task_del(const char *name);
/* --------------------------------------------------------------------------*/
/**
* @brief 延时。中断函数或者关闭系统总中断的情况下不能调用此函数
*
* @param time_tick 延时时间
*/
/* ----------------------------------------------------------------------------*/
void os_time_dly(int time_tick);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送Q_USER类型taskq
*
* @param name 任务名
* @param argc 后面传入的参数的个数。发送的最大参数个数限制为8个int类型
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_post(const char *name, int argc, ...);
/* --------------------------------------------------------------------------*/
/**
* @brief 非阻塞方式查询taskq
*
* @param argc 最大可获取的queue长度,单位(int)
* @param argv 存放queue的buf
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_accept(int argc, int *argv);
/* --------------------------------------------------------------------------*/
/**
* @brief 阻塞方式获取taskq
*
* @param fmt 保留,传NULL
* @param argv 存放queue的buf
* @param argc 最大可获取的queue长度,单位(int)
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_pend(const char *fmt, int *argv, int argc);
// int os_task_pend(const char *fmt, int *argv, int argc);
// int __os_taskq_pend(int *argv, int argc, int tick);
/* --------------------------------------------------------------------------*/
/**
* @brief 超时方式获取taskq
*
* @param fmt 保留,传NULL
* @param argv 存放queue的buf
* @param argc 最大可获取的queue长度,单位(int)
* @param tick 超时时间, 单位: tick(10ms)
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_pend_timeout(const char *fmt, int *argv, int argc, int tick);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送指定类型的taskq
*
* @param name 任务名
* @param type queue类型
* @param argc 后面传入的参数的个数
* @param argv
*
* @return 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_post_type(const char *name, int type, int argc, int *argv);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送Q_MSG类型的taskq
*
* @param name 任务名
* @param argc 后面参数的个数
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_post_msg(const char *name, int argc, ...);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送Q_EVENT类型的taskq
*
* @param name 任务名
* @param argc 后面参数的个数
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_post_event(const char *name, int argc, ...);
/* --------------------------------------------------------------------------*/
/**
* @brief 删除指定类型的taskq
*
* @param name 任务名
* @param type taskq的类型
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_del_type(const char *name, int type);
/* --------------------------------------------------------------------------*/
/**
* @brief 清除所有taskq
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_taskq_flush(void);
/* --------------------------------------------------------------------------*/
/**
* @brief 创建信号量
*
* @param sem 信号量
* @param int 初始计数值
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_create(OS_SEM *, int);
/* --------------------------------------------------------------------------*/
/**
* @brief 非阻塞方式查询信号量
*
* @param sem 信号量
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_accept(OS_SEM *);
/* --------------------------------------------------------------------------*/
/**
* @brief 阻塞方式获取信号量
*
* @param sem 信号量
* @param timeout 等待时长,0表示一直等待
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_pend(OS_SEM *, int timeout);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送信号量
*
* @param sem 信号量
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_post(OS_SEM *);
/* --------------------------------------------------------------------------*/
/**
* @brief 信号量删除
*
* @param sem 信号量
* @param block 保留
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_del(OS_SEM *, int block);
/* --------------------------------------------------------------------------*/
/**
* @brief 信号量设置
*
* @param sem 信号量
* @param cnt 计数值
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_set(OS_SEM *, u16 cnt);
/* --------------------------------------------------------------------------*/
/**
* @brief 信号量类型是否queueQUEUE_TYPE_COUNTING_SEMAPHORE
*
* @param true:信号量匹配, fail:信号量不匹配
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_sem_valid(OS_SEM *);
/* --------------------------------------------------------------------------*/
/**
* @brief 判断信号量是否可用
*
* @param sem 信号量
*
* @reutrn 可用数量
*/
/* ----------------------------------------------------------------------------*/
int os_sem_query(OS_SEM *);
/* --------------------------------------------------------------------------*/
/**
* @brief 创建互斥量
*
* @param mutex 互斥量
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_create(OS_MUTEX *);
/* --------------------------------------------------------------------------*/
/**
* @brief 非阻塞方式查询互斥量
*
* @param mutex:互斥量
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_accept(OS_MUTEX *);
/* --------------------------------------------------------------------------*/
/**
* @brief 阻塞方式查询互斥量
*
* @param mutex 互斥量
* @param timeout 等待时间,0表示一直等待
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_pend(OS_MUTEX *, int timeout);
/* --------------------------------------------------------------------------*/
/**
* @brief 发送斥量
*
* @param mutex 互斥量
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_post(OS_MUTEX *);
/* --------------------------------------------------------------------------*/
/**
* @brief 删除斥量
*
* @param mutex 互斥量
* @param block 保留
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_del(OS_MUTEX *, int block);
/* --------------------------------------------------------------------------*/
/**
* @brief 互斥量类型是否queueQUEUE_TYPE_MUTEX
*
* @param true:互斥量匹配, fail:互斥量不匹配
*
* @reutrn 错误码
*/
/* ----------------------------------------------------------------------------*/
int os_mutex_valid(OS_MUTEX *);
/*struct os_msg *os_message_create(int size);
int os_message_receive(struct os_msg **msg, int block_time);
int os_message_send(const char *task_name, struct os_msg *msg, int msgflg);
int os_message_delete(struct os_msg *msg);*/
int os_q_create(OS_QUEUE *pevent, /*void **start, */QS size);
int os_q_del(OS_QUEUE *pevent, u8 opt);
int os_q_flush(OS_QUEUE *pevent);
int os_q_pend(OS_QUEUE *pevent, int timeout, void *msg);
int os_q_post(OS_QUEUE *pevent, void *msg);
int os_q_query(OS_QUEUE *pevent);
int os_q_valid(OS_QUEUE *pevent);
int task_queue_post_event(const char *name, void *data, int len);
void *os_task_get_handle(const char *name);
void os_suspend_other_core(void);
void os_resume_other_core(void);
void os_system_info_output(void);
u8 os_idle_percentage(void);
#ifdef __cplusplus
}
#endif
#endif
+46
View File
@@ -0,0 +1,46 @@
#ifndef _OS_COMPAT_H_
#define _OS_COMPAT_H_
#include "os/os_api.h"
enum kill_mode {
KILL_WAIT,
KILL_REQ,
KILL_FORCE,
};
int sem_init(int *sem, int cnt);
int sem_pend(int *sem, unsigned int timeout);
int sem_post(int *sem);
int sem_set(int *sem, int init_val);
int sem_del(int *sem);
int thread_fork_init(void);
int thread_fork(const char *thread_name, int prio, int stk_size, u32 q_size, int *pid, void (*func)(void *), void *parm);
void thread_kill(volatile int *pid, enum kill_mode mode);
int thread_kill_req(void);
u16 thread_put_msg_fifo(u32 msg, u8 type, int *pid);
u16 thread_put_msg_lifo(u32 msg, u8 type, int *pid);
int *get_cur_thread_pid(void);
int thread_rpc(bool wait_finish, void (*rpc_finish_cb)(void *priv), int prio, int stk_size, void (*thread_func)(void *priv), void *priv);
void udelay(unsigned int t);
void usleep(unsigned int t);
void mdelay(unsigned int ms);
void msleep(unsigned int ms);
int pthread_mutexattr_init(int *attr);
int pthread_mutex_init(int *mutex, const int *attr);
int pthread_mutex_lock(int *mutex);
int pthread_mutex_unlock(int *mutex);
int pthread_mutex_destroy(int *mutex);
#endif //_OS_COMPAT_H_
+114
View File
@@ -0,0 +1,114 @@
/***********************************Jieli tech************************************************
File : os_cpu.h
By : Juntham
date : 2014-07-03 09:06
********************************************************************************************/
#ifndef _OS_CPU_H
#define _OS_CPU_H
#include "asm/cpu.h"
#include "jiffies.h"
#ifndef __ASSEMBLY__
typedef unsigned short QS;
typedef unsigned int OS_STK; /* Each stack entry is 32-bit wide*/
typedef unsigned int OS_CPU_SR; /* Unsigned 32 bit quantity */
typedef unsigned int OS_CPU_DATA; /* Unsigned 32 bit quantity */
#endif
#define OS_CPU_EXT extern
#define OS_CPU_CORE CPU_CORE_NUM
#define OS_CPU_ID current_cpu_id()
#define OS_STK_GROWTH 1 /* Stack grows from HIGH to LOW memory*/
#define OS_CPU_VIRTUAL_MEM 1
#ifndef OS_CORE_AFFINITY_ENABLE
#define OS_CORE_AFFINITY_ENABLE 0
#endif
#define OS_TASK_CLR(a) CPU_TASK_CLR(a)
#define OS_TASK_SW(a) CPU_TASK_SW(a) /* 任务级任务切换函数*/
#define OS_INT_NESTING CPU_INT_NESTING
#define CPU_SR_ALLOC()
#define OS_SR_ALLOC()
#define OS_ENTER_CRITICAL() \
CPU_CRITICAL_ENTER(); \
#define OS_EXIT_CRITICAL() \
CPU_CRITICAL_EXIT()
#ifndef __ASSEMBLY__
/*#include "system/spinlock.h"
extern spinlock_t os_lock;
#define OS_ENTER_CRITICAL() \
spin_lock(&os_lock)
#define OS_EXIT_CRITICAL() \
spin_unlock(&os_lock)*/
void OSCtxSw(void);
extern void EnableOtherCpu(void) ;
void OSInitTick(u32 hz);
void InstallOSISR(void);
void os_task_dead(const char *task_name);
//=======================================================//
// 系统进临界区多核同步类型 //
//=======================================================//
enum CPU_SUSPEND_TYPE {
CPU_SUSPEND_TYPE_NONE = 0,
CPU_SUSPEND_TYPE_SFC = 0x55, //操作Flash
CPU_SUSPEND_TYPE_PDOWN, //系统进低功耗Pdown
CPU_SUSPEND_TYPE_POFF, //系统进低功耗Pdown
CPU_SUSPEND_TYPE_SOFF,
CPU_SUSPEND_TYPE_UPDATE,
};
/* ---------------------------------------------------------------------------- */
/**
* @brief 系统进入临界区用于多核同步
*/
/* ---------------------------------------------------------------------------- */
void cpu_suspend_other_core(enum CPU_SUSPEND_TYPE type);
/* ---------------------------------------------------------------------------- */
/**
* @brief 系统退出临界区用于多核同步
*/
/* ---------------------------------------------------------------------------- */
void cpu_resume_other_core(enum CPU_SUSPEND_TYPE type);
#endif
/*
*********************************************************************************************************
* DATA TYPES
* (Compiler Specific)
*********************************************************************************************************
*/
#define OS_CRITICAL_METHOD 3
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
//#define CPU_SR_ALLOC() OS_CPU_SR cpu_sr
#endif
#endif /*_OS_CPU_H */
+79
View File
@@ -0,0 +1,79 @@
#ifndef __OS_ERROR_H__
#define __OS_ERROR_H__
#define OS_ERR_NONE 0
enum {
OS_NO_ERR = 0,
OS_TRUE,
OS_ERR_EVENT_TYPE,
OS_ERR_PEND_ISR,
OS_ERR_POST_NULL_PTR,
OS_ERR_PEVENT_NULL,
OS_ERR_POST_ISR,
OS_ERR_QUERY_ISR,
OS_ERR_INVALID_OPT,
OS_ERR_TASK_WAITING,
OS_ERR_PDATA_NULL,
OS_TIMEOUT,
OS_TIMER,
OS_TASKQ,
OS_TASK_NOT_EXIST,
OS_ERR_EVENT_NAME_TOO_LONG,
OS_ERR_FLAG_NAME_TOO_LONG,
OS_ERR_TASK_NAME_TOO_LONG,
OS_ERR_PNAME_NULL,
OS_ERR_TASK_CREATE_ISR,
OS_MBOX_FULL,
OS_Q_FULL,
OS_Q_EMPTY,
OS_Q_ERR,
OS_ERR_NO_QBUF,
OS_PRIO_EXIST,
OS_PRIO_ERR,
OS_PRIO_INVALID,
OS_SEM_OVF,
OS_TASK_DEL_ERR,
OS_TASK_DEL_IDLE,
OS_TASK_DEL_ISR,
OS_NO_MORE_TCB,
OS_TIME_NOT_DLY,
OS_TIME_INVALID_MINUTES,
OS_TIME_INVALID_SECONDS,
OS_TIME_INVALID_MILLI,
OS_TIME_ZERO_DLY,
OS_TASK_SUSPEND_PRIO,
OS_TASK_SUSPEND_IDLE,
OS_TASK_RESUME_PRIO,
OS_TASK_NOT_SUSPENDED,
OS_MEM_INVALID_PART,
OS_MEM_INVALID_BLKS,
OS_MEM_INVALID_SIZE,
OS_MEM_NO_FREE_BLKS,
OS_MEM_FULL,
OS_MEM_INVALID_PBLK,
OS_MEM_INVALID_PMEM,
OS_MEM_INVALID_PDATA,
OS_MEM_INVALID_ADDR,
OS_MEM_NAME_TOO_LONG,
OS_ERR_MEM_NO_MEM,
OS_ERR_NOT_MUTEX_OWNER,
OS_TASK_OPT_ERR,
OS_ERR_DEL_ISR,
OS_ERR_CREATE_ISR,
OS_FLAG_INVALID_PGRP,
OS_FLAG_ERR_WAIT_TYPE,
OS_FLAG_ERR_NOT_RDY,
OS_FLAG_INVALID_OPT,
OS_FLAG_GRP_DEPLETED,
OS_ERR_PIP_LOWER,
OS_ERR_MSG_POOL_EMPTY,
OS_ERR_MSG_POOL_NULL_PTR,
OS_ERR_MSG_POOL_FULL,
};
#endif
+73
View File
@@ -0,0 +1,73 @@
#ifndef __OS_TYPE_H
#define __OS_TYPE_H
#define OS_TICKS_PER_SEC 100
#define Q_MSG 0x100000
#define Q_EVENT 0x200000
#define Q_CALLBACK 0x300000
#define Q_USER 0x400000
#define OS_DEL_NO_PEND 0u
#define OS_DEL_ALWAYS 1u
#define OS_TASK_DEL_REQ 0x01u
#define OS_TASK_DEL_RES 0x02u
#define OS_TASK_DEL_OK 0x03u
#define OS_TASK_SELF (char *)0x1
#define OS_TASK_FATHER (char *)0x2
#ifdef CONFIG_UCOS_ENABLE
typedef struct {
unsigned char OSEventType;
int aa;
void *bb;
unsigned char value;
unsigned char prio;
unsigned short cc;
} OS_SEM, OS_MUTEX, OS_QUEUE;
#elif defined CONFIG_FREE_RTOS_ENABLE
struct StaticMiniListItem {
uint32_t tick;
void *pvDummy2[2];
};
struct StaticList {
unsigned long uxDummy1;
void *pvDummy2;
struct StaticMiniListItem xDummy3;
};
typedef struct {
void *pvDummy1[3];
union {
void *pvDummy2;
unsigned long uxDummy2;
} u;
struct StaticList xDummy3[2];
unsigned long uxDummy4[3];
uint8_t ucDummy5[2];
uint8_t ucDummy6;
unsigned long uxDummy8;
uint8_t ucDummy9;
} OS_SEM, OS_MUTEX, OS_QUEUE;
#else
#error "no_os_defined"
#endif
#endif