UP Task,Argpase

This commit is contained in:
JiXieShi
2024-05-10 13:47:39 +08:00
parent 84bc401ba4
commit be1d31e732
18 changed files with 591 additions and 63 deletions

41
lib/inc/arg/argpase.h Normal file
View File

@@ -0,0 +1,41 @@
#ifndef ARGPASE_H
#define ARGPASE_H
typedef char OptId;
typedef struct Option {
char *name;
OptId id;
} Option;
typedef struct OptList {
struct OptList *next;
Option *Option;
} OptList;
extern char *Optarg, *Optstr;
//索引指示可手动重载为0
extern int Optindex;
//选项链表创建
OptList *Options_Creat(char *opt, OptId index);
//使用选项结构体创建
OptList *Options_CreatOpt(Option *opt);
//添加
void Options_Add(OptList *opts, OptList *opt);
//删除
bool Options_Del(OptList *opts, char *opt);
//打印选项和id
void Options_Print(OptList *opts);
//开始匹配参数
OptId Options_Load(OptList *opts, char *argv[], size_t argc);
//字符串转参数数组
size_t Str_To_Args(char *str, char *argv[]);
#endif //ARGPASE_H

View File

@@ -1,9 +1,5 @@
//
// Created by lydxh on 2024/5/9.
//
#ifndef HW_LIB_IIC_H
#define HW_LIB_IIC_H
#ifndef SW_LIB_IIC_H
#define SW_LIB_IIC_H
#include <stdint.h>
@@ -23,7 +19,7 @@ typedef struct {
uint8_t (*SDA)(); // 读取数据引脚状态的函数指针
uint8_t (*SDA_MODE)(uint8_t); // 设置数据引脚模式的函数指针
uint8_t ADD; // IIC设备地址
} HW_Dev_IIC;
} SW_Dev_IIC;
/**
* @brief 向 IIC 设备写入数据流
@@ -33,7 +29,7 @@ typedef struct {
* @param Len: [输入] 数据流长度
* @return void
**/
void HW_IIC_WL(HW_Dev_IIC Dev, uint8_t InternalAddress, uint8_t *Write_Data, uint32_t Len);
void SW_IIC_WL(SW_Dev_IIC Dev, uint8_t InternalAddress, uint8_t *Write_Data, uint32_t Len);
/**
* @brief 从 IIC 设备读取数据流
@@ -44,6 +40,6 @@ void HW_IIC_WL(HW_Dev_IIC Dev, uint8_t InternalAddress, uint8_t *Write_Data, uin
* @param Ack: [输入] 确认应答位
* @return void
**/
void HW_IIC_RL(HW_Dev_IIC Dev, uint8_t InternalAddress, uint8_t *Read_Data, uint32_t Len, uint8_t Ack);
void SW_IIC_RL(SW_Dev_IIC Dev, uint8_t InternalAddress, uint8_t *Read_Data, uint32_t Len, uint8_t Ack);
#endif //HW_LIB_IIC_H
#endif //SW_LIB_IIC_H

View File

@@ -1,15 +1,11 @@
//
// Created by lydxh on 2024/4/8.
//
#ifndef HW_LIB_SPI_H
#define HW_LIB_SPI_H
#ifndef SW_LIB_SPI_H
#define SW_LIB_SPI_H
#include <stdint.h>
#define HIGH 1
#define LOW 0
#define NOP() ;
#define NOP() 0
#define DELAY1US() NOP()
/**
@@ -42,7 +38,7 @@ typedef struct {
mode MODE; // SPI模式
uint8_t CS; // CS引脚编号
endian ENDIAN; // 数据端序
} HW_Dev_Spi;
} SW_Dev_Spi;
/**
* @brief 向 SPI 设备写入一个字节并读取返回的数据
@@ -50,7 +46,7 @@ typedef struct {
* @param Write_Date: [输入]要写入的数据
* @return 读取到的数据
**/
uint8_t HW_SPI_RW(HW_Dev_Spi Dev, uint8_t Write_Date);
uint8_t SW_SPI_RW(SW_Dev_Spi Dev, uint8_t Write_Date);
/**
* @brief 向 SPI 设备写入数据流
@@ -59,7 +55,7 @@ uint8_t HW_SPI_RW(HW_Dev_Spi Dev, uint8_t Write_Date);
* @param Len: [输入] 数据流长度
* @return void
**/
void HW_SPI_WL(HW_Dev_Spi Dev, uint8_t *Write_Date, uint32_t Len);
void SW_SPI_WL(SW_Dev_Spi Dev, uint8_t *Write_Date, uint32_t Len);
/**
* @brief 从 SPI 设备读取数据流
@@ -68,7 +64,7 @@ void HW_SPI_WL(HW_Dev_Spi Dev, uint8_t *Write_Date, uint32_t Len);
* @param Len: [输入] 读取数据流长度
* @return void
**/
void HW_SPI_RL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint32_t Len);
void SW_SPI_RL(SW_Dev_Spi Dev, uint8_t *Read_Date, uint32_t Len);
/**
* @brief 向 SPI 设备写入数据并读取返回数据流
@@ -78,7 +74,7 @@ void HW_SPI_RL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint32_t Len);
* @param Len: [输入] 数据流长度
* @return void
**/
void HW_SPI_RWL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint8_t *Write_Date, uint32_t Len);
void SW_SPI_RWL(SW_Dev_Spi Dev, uint8_t *Read_Date, uint8_t *Write_Date, uint32_t Len);
/**
* @brief 向 SPI 设备写入一个字16位并读取返回的数据
@@ -86,7 +82,7 @@ void HW_SPI_RWL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint8_t *Write_Date, uint32_
* @param Write_Date: [输入]要写入的数据
* @return 读取到的数据
**/
uint16_t HW_SPI_RW16(HW_Dev_Spi Dev, uint16_t Write_Date);
uint16_t SW_SPI_RW16(SW_Dev_Spi Dev, uint16_t Write_Date);
/**
* @brief 从 SPI 设备读取数据流16位
@@ -95,7 +91,7 @@ uint16_t HW_SPI_RW16(HW_Dev_Spi Dev, uint16_t Write_Date);
* @param Len: [输入] 读取数据流长度
* @return void
**/
void HW_SPI_RL16(HW_Dev_Spi Dev, uint16_t *Read_Date, uint32_t Len);
void SW_SPI_RL16(SW_Dev_Spi Dev, uint16_t *Read_Date, uint32_t Len);
/**
* @brief 向 SPI 设备写入数据流16位
@@ -104,7 +100,7 @@ void HW_SPI_RL16(HW_Dev_Spi Dev, uint16_t *Read_Date, uint32_t Len);
* @param Len: [输入] 数据流长度
* @return void
**/
void HW_SPI_WL16(HW_Dev_Spi Dev, uint16_t *Write_Date, uint32_t Len);
void SW_SPI_WL16(SW_Dev_Spi Dev, uint16_t *Write_Date, uint32_t Len);
/**
* @brief 向 SPI 设备写入数据并读取返回数据流16位
@@ -114,6 +110,6 @@ void HW_SPI_WL16(HW_Dev_Spi Dev, uint16_t *Write_Date, uint32_t Len);
* @param Len: [输入] 数据流长度
* @return void
**/
void HW_SPI_RWL16(HW_Dev_Spi Dev, uint16_t *Read_Date, uint16_t *Write_Date, uint32_t Len);
void SW_SPI_RWL16(SW_Dev_Spi Dev, uint16_t *Read_Date, uint16_t *Write_Date, uint32_t Len);
#endif //HW_LIB_SPI_H
#endif //SW_LIB_SPI_H

13
lib/inc/target.h Normal file
View File

@@ -0,0 +1,13 @@
#ifndef RETARGET_H
#define RETARGET_H
#include <sys/stat.h>
#include <stdio.h>
void RetargetInit(UART_HandleTypeDef *huart);
int _write(int fd, char *ptr, int len);
int _read(int fd, char *ptr, int len);
#endif //#ifndef RETARGET_H

60
lib/inc/task/task.h Normal file
View File

@@ -0,0 +1,60 @@
#ifndef TASK_H
#define TASK_H
#include "stdint.h"
#define true 0
#define false (-1)
//平台切换相关类型重定义
typedef int64_t TaskStatus_t;
typedef uint64_t TaskTime_t;
typedef int64_t TaskCnt_t;
typedef struct TaskList Task_t;
typedef uint64_t (*PlatformTicksFunc_t)(void);
typedef void (*Task_Callback_t)(Task_t *task, void *userdata);
struct TaskList {
Task_t *next;
uint8_t enable;
TaskCnt_t runcnt;
TaskTime_t lasttime;
TaskTime_t intervaltime;
Task_Callback_t callback;
void *userdata;
};
//时间基准注册建议1-10ms的基准
TaskStatus_t TaskInit(PlatformTicksFunc_t TicksFunc);
//创建任务
// time:间隔时间
// runcnt:执行次数 为-1无限制执行 为0只创建不运行
// callback:回调函数
// userdata:用户数据传参
TaskStatus_t TaskCreat(Task_t *task, TaskTime_t time, TaskCnt_t runcnt, Task_Callback_t callback, void *userdata);
//添加任务
TaskStatus_t TaskAdd(Task_t *task);
//删除任务
TaskStatus_t TaskDel(Task_t *task);
//重新开始以停止的任务
TaskStatus_t TaskStart(Task_t *task);
//暂停任务执行
TaskStatus_t TaskStop(Task_t *task);
//重设任务执行次数
TaskStatus_t TaskSetCnt(Task_t *task, TaskCnt_t runcnt);
//重设任务间隔时间
TaskStatus_t TaskSetTime(Task_t *task, TaskTime_t time);
//任务调度
TaskStatus_t TaskRun(void);
#endif //TASK_H