PSDK 跨平台移植

2022-07-25

PSDK 跨平台相关功能的头文件为psdk_platform.h,本文档描述了psdk_platform.h 文件中结构体和函数原型的关键信息和使用方法。

目录

宏定义

  • 线程句柄
typedef void *T_PsdkTaskHandle;
  • 使用互斥锁句柄
typedef void *T_PsdkMutexHandle;
  • 使用信号量句柄
typedef void *T_PsdkSemHandle;

结构体

typedef struct T_PsdkHalUartHandler

实现Hal 层函数的功能,请根据本结构体中的函数构造Hal 层相关功能的回调函数,其中包括:

  • 初始化连接到负载设备Uart 口的配置信息
  • 通过uart 接口向负载设备写入数据
  • 通过Uart 口读取负载设备中数据
typedef struct {
@brief 初始化连接到负载设备Uart 口配置信息的回调函数
@note 如需实现跨平台移植功能,请先实现并注册初始化串口配置信息的回调函数
@return 执行结果
T_PsdkReturnCode (*UartInit)(void);

@brief 通过uart 接口向负载设备写入数据的回调函数
@note 通过串口向负载设备写入数据时,请先实现并注册向负载设备发送数据的回调函数
@note 在注册回调函数前,请使用相关串口工具测试该串口能够正确地向负载设备写入数据
@param buf: 指向用于存储通过Uart 口向负载设备发送的数据的内存
@param len: 通过Uart 口向负载设备发送的数据的长度
@return 执行结果
T_PsdkReturnCode (*UartWriteData)(const uint8_t *buf, uint16_t len);

@brief 通过Uart 口读取负载设备中数据的回调函数
@note 通过Uart 口读取负载设备中的数据时,请先实现并注册读取负载设备中数据的回调函数
@note 在注册回调函数前,请使用相关工具测试该Uart 口能够正确地读取负载设备中的数据
@param buf: 指向用于存储从Uart 口读取的负载设备中数据的内存
@param len: 通过Uart 口从负载设备读取的数据的长度
@param realLen: 指向用于存储从Uart 口读取的负载设备中实际长度的数据的内存
@return 执行结果
T_PsdkReturnCode (*UartReadData)(uint8_t *buf, uint16_t len, uint16_t *realLen);

} T_PsdkHalUartHandler;

typedef struct T_PsdkOsalHandler

实现Osal 层函数的功能,请根据本结构体中的函数构造Osal 层相关功能的回调函数,其中包括:

  • 声明任务容器
  • 销毁已创建的任务
  • 在指定的时间内控制任务睡眠,单位:ms
  • 声明互斥锁的容器
  • 销毁互斥锁
  • 对已创建的互斥锁上锁
  • 解锁并释放已锁定的互斥锁
  • 声明信号量的容器
  • 销毁信号量
  • 等待创建信号量
  • 等待创建信号量超时
  • 释放已创建的信号量
  • 获取负载设备操作系统毫秒时间,单位:ms
  • 分配指定内存
  • 释放已分配的内存
typedef struct {
@brief 创建任务的回调函数,通过该接口实现任务初始化并创建任务ID
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口实现任务初始化并创建所需的任务,详情请参见:PsdkOsal_TaskCreate.
@param task: 指向用于存储所创建的任务的内存
@param taskFunc: 指向所创建的任务函数
@param name: 指向任务的名称(以'\0'结尾),若未对该任务指定名称,请填入“NULL
@param stackSize: 任务堆栈空间的大小,单位:byte(字节)
@param arg: 指向用户定义的数据
@return 执行结果
T_PsdkReturnCode
(*TaskCreate)(T_PsdkTaskHandle *task, void *(*taskFunc)(void *), const char *name, uint32_t stackSize, void *arg);

@brief 构造用于销毁已创建的任务的回调函数
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口销毁已创建的任务,在注册该回调函数前,请先测试该接口能够正常销毁已创建的回调函数,详情请参见:PsdkOsal_TaskDestroy
@param task: 已创建的任务函数
@return 执行结果
T_PsdkReturnCode (*TaskDestroy)(T_PsdkTaskHandle task);

@brief 在指定的时间内控制任务睡眠的回调函数,单位:ms
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口控制任务睡眠,在注册该回调函数前,请先测试该接口能够正常控制任务睡眠,详情请参见:PsdkOsal_TaskSleepMs
@param timeMs:任务睡眠的时间
@return 执行结果
T_PsdkReturnCode (*TaskSleepMs)(uint32_t timeMs);

@brief 创建互斥锁的回调函数,通过该接口实现互斥锁初始化并创建互斥锁的ID
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口创建并初始化互斥锁,在注册该回调函数前,请先测试该接口能够正常创建并初始化互斥锁,详情请参见:PsdkOsal_MutexCreate
@param mutex: 指向用于存储已创建的互斥锁ID 的内存
@return 执行结果
T_PsdkReturnCode (*MutexCreate)(T_PsdkMutexHandle *mutex);

@brief 构造用于销毁互斥锁的回调函数,通过该接口销毁已创建的互斥锁
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口销毁已创建的互斥锁,在注册该回调函数前,请先测试该接口能够正常销毁互斥锁,详情请参见:PsdkOsal_MutexDestroy
@param mutex: 指向用于存储已创建的互斥锁ID 的内存
@return 执行结果
T_PsdkReturnCode (*MutexDestroy)(T_PsdkMutexHandle mutex);

@brief 构造用于对已创建的互斥锁上锁的回调函数
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口获取并为已创建的互斥锁上锁,在注册该回调函数前,请先测试该接口能够正常获取并锁定已创建的互斥锁,详情请参见:PsdkOsal_MutexLock
@param mutex: 指向用于存储已创建的互斥锁ID 的内存
@return 执行结果
T_PsdkReturnCode (*MutexLock)(T_PsdkMutexHandle mutex);

@brief 构造用于解锁并释放已锁定的互斥锁的回调函数
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口解锁并释放已锁定的互斥锁,在注册该回调函数前,请先测试该接口能够正常解锁并释放已锁定的互斥锁,详情请参见:PsdkOsal_MutexUnlock
@param mutex: 指向用于存储已创建的互斥锁ID 的内存
@return 执行结果
T_PsdkReturnCode (*MutexUnlock)(T_PsdkMutexHandle mutex);

@brief 构造用于声明信号量的容器的回调函数,通过该接口实现信号量初始化并创建信号量的ID
@note 请开发者根据实际选用的操作系统和开发平台,通过该接口创建并初始化信号量,在注册该回调函数前,请先测试该接口能够正常创建并初始化信号量,详情请参见:sdkOsal_SemaphoreCreate
@param semaphore: 指向用于存储已创建的信号量ID 的内存
@param initValue: 已创建的信号量的初始值
@return 执行结果
T_PsdkReturnCode (*SemaphoreCreate)(T_PsdkSemHandle *semaphore, uint32_t initValue);

@brief 构造用于销毁信号量的回调函数,通过该接口销毁已创建的信号量
@note 开发者根据实际选用的操作系统和开发平台,通过该接口销毁已创建的信号量,在注册该回调函数前,请先测试该接口能够正常销毁信号量,详情请参见:PsdkOsal_SemaphoreDestroy.s
@param semaphore: 指向用于存储已创建的信号量ID 的内存
@return 执行结果
T_PsdkReturnCode (*SemaphoreDestroy)(T_PsdkSemHandle semaphore);

@brief 构造用于等待创建信号量的回调函数,通过该接口等待创建信号量
@note 开发者根据实际选用的操作系统和开发平台,通过该接口等待创建信号量,在注册该回调函数前,请先测试该接口能够正常等待并创建信号量,详情请参见:PsdkOsal_SemaphoreWait
@param semaphore: 指向用于存储已创建的信号量ID 的内存
@return 执行结果
T_PsdkReturnCode (*SemaphoreWait)(T_PsdkSemHandle semaphore);

@brief 构造用于等待创建信号量超时的回调函数,通过该接口设置等待创建信号量超时的时间
@note 开发者根据实际选用的操作系统和开发平台,通过该接口设置等待创建信号量超时的时间,在注册该回调函数前,请先测试该接口能够正常设置超时时间,详情请参见:PsdkOsal_SemaphoreTimedWait
@param semaphore: 指向用于存储已创建的信号量ID 的内存
@param waitTimeMs: 等待创建信号量超时的时间
@return 执行结果
T_PsdkReturnCode (*SemaphoreTimedWait)(T_PsdkSemHandle semaphore, uint32_t waitTimeMs);

@brief 构造用于释放已创建的信号量的回调函数
@note 开发者根据实际选用的操作系统和开发平台,通过该接口释放已创建的信号量,在注册该回调函数前,请先测试该接口能够正常释放信号量,详情请参见:PsdkOsal_SemaphorePost
@param semaphore: 指向用于存储已创建的信号量ID 的内存
@return 执行结果
T_PsdkReturnCode (*SemaphorePost)(T_PsdkSemHandle semaphore);

@brief 构造用于获取负载设备操作系统毫秒时间的回调函数,单位:ms
@note 开发者根据实际选用的操作系统和开发平台,通过该接口获取负载设备系统的毫秒时间,在注册该回调函数前,请先测试该接口能够正常获取操作系统的毫秒时间,详情请参见:PsdkOsal_GetTimeMs
@param factor: 指向用于存储该系统时间的内存
@return 执行结果
T_PsdkReturnCode (*GetTimeMs)(uint32_t *ms);

@brief 构造分配指定内存的回调函数
@note 开发者根据实际选用的操作系统和开发平台,通过该接口获取负载设备系统的毫秒时间,在注册该回调函数前,请先测试该接口能够正常获取操作系统的毫秒时间,详情请参见:PsdkOsal_Malloc
@param size: 分配uint32_t 的内存
@return 分配一个内存为空的内存,当返回值为 NULL 时,请重新分配内存
void *(*Malloc)(uint32_t size);

@brief 构造释放已分配的内存的回调函数
@note 开发者根据实际选用的操作系统和开发平台,通过该接口释放已分配的内存,在注册该回调函数前,请先测试该接口能够释放已分配的内存,详情请参见:PsdkOsal_Free
@param ptr: 指向需要释放的内存
void (*Free)(void *ptr);

} T_PsdkOsalHandler;

函数原型

function PsdkPlatform_RegHalUartHandler

功能:注册Hal 层接口函数 product:all

注册适配负载设备Hal 层接口的回调函数。

说明

  • 在注册Hal 层接口的回调函数前,请测试该函数能够正常写入Hal 层接口配置信息;
  • 请在使用负载设备的功能前先调用该接口,否则负载设备将无法正常运行。
T_PsdkReturnCode PsdkPlatform_RegHalUartHandler(const T_PsdkHalUartHandler *halUartHandler);

参数
halUartHandler:指向负载设备操作系统hal 层接口函数
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkPlatform_RegOsalHandler

功能:注册Osal 层函数 product:all

注册适配负载设备Osal 层接口的回调函数。

说明:

  • 在注册Osal 层接口的回调函数前,请测试该函数能够正常写入Osal 层接口配置信息;
  • 请在使用负载设备的功能前先调用该接口,否则负载设备将无法正常运行。
T_PsdkReturnCode PsdkPlatform_RegOsalHandler(const T_PsdkOsalHandler *osalHandler);

参数
osalHandler:指向负载设备第三方开发平台Osal 层接口函数
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_TaskCreate

功能:注册与任务管理机制相关的函数 product:all

注册与任务管理机制相关的函数。

T_PsdkReturnCode
PsdkOsal_TaskCreate(T_PsdkTaskHandle *task, void *(*taskFunc)(void *), const char *name, uint32_t stackSize,
void *arg);

参数
task:指向已创建的任务ID
taskFunc:指向创建任务的回调函数
name:指向任务的名称,结尾为'\0' ,若开发者未指定任务的名称,填充为NULL
stackSize:指向任务的堆栈空间,单位:byte
arg:用户自定义
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_TaskDestroy

功能:销毁已创建的任务 product:all

销毁已创建的任务。

T_PsdkReturnCode PsdkOsal_TaskDestroy(T_PsdkTaskHandle task);

参数
task:指向已创建的任务的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_TaskSleepMs

功能:设置任务睡眠时间 product:all

控制某一任务在指定的时间内睡眠,单位:ms。

T_PsdkReturnCode PsdkOsal_TaskSleepMs(uint32_t timeMs);

参数
timeMs:指定某一任务睡眠的时间
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_MutexCreate

功能:注册与互斥锁机制相关的函数 product:all

注册与互斥锁机制相关的函数。

T_PsdkReturnCode PsdkOsal_MutexCreate(T_PsdkMutexHandle *mutex);

参数
mutex:指向已创建的互斥锁的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_MutexDestroy

功能:销毁已创建的互斥锁 product:all

销毁已创建的互斥锁。

T_PsdkReturnCode PsdkOsal_MutexDestroy(T_PsdkMutexHandle mutex);

参数
mutex:指向已创建的互斥锁ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_MutexLock

功能:获取并锁定外部程序访问的线程 product:all

获取并锁定外部程序访问的线程。

T_PsdkReturnCode PsdkOsal_MutexLock(T_PsdkMutexHandle mutex);

参数
mutex:指向已创建的互斥锁的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_MutexUnlock

功能:解锁并释放外部程序访问的线程 product:all

解锁并释放外部程序访问的线程。

T_PsdkReturnCode PsdkOsal_MutexUnlock(T_PsdkMutexHandle mutex);

参数
mutex:指向已创建的互斥锁的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_SemaphoreCreate

功能:注册与信号量机制相关的函数 product:all

注册与信号量机制相关的函数。

T_PsdkReturnCode PsdkOsal_SemaphoreCreate(T_PsdkSemHandle *semaphore, uint32_t initValue);

参数
semaphore:指向已创建的信号量的ID
initValue:已创建的信号量的初始值
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_SemaphoreDestroy

功能:销毁已创建的信号量 product:all

销毁已创建的信号量。

T_PsdkReturnCode PsdkOsal_SemaphoreDestroy(T_PsdkSemHandle semaphore);

参数
semaphore:指向已创建的信号量的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_SemaphoreWait

功能:等待已创建的信号量 product:all

等待已创建的信号量。

T_PsdkReturnCode PsdkOsal_SemaphoreWait(T_PsdkSemHandle semaphore);

参数
semaphore:指向已创建的信号量的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_SemaphoreTimedWait

功能:设置信号量等待和超时时间 product:all

等待并设置已创建信号量的超时时间。

T_PsdkReturnCode PsdkOsal_SemaphoreTimedWait(T_PsdkSemHandle semaphore, uint32_t waitTimeMs);

参数
semaphore:指向已创建的信号量的ID
waitTimeMs:等待创建信号量超时的时间
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_SemaphorePost

功能:释放已创建的信号量 product:all

释放已创建的信号量。

T_PsdkReturnCode PsdkOsal_SemaphorePost(T_PsdkSemHandle semaphore);

参数
semaphore:指向已创建的信号量的ID
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_GetTimeMs

功能:获取负载设备操作系统的毫秒时间 product:all

获取负载设备操作系统的毫秒时间,单位:ms。

T_PsdkReturnCode PsdkOsal_GetTimeMs(uint32_t *ms);

参数
ms:指向获取的毫秒时间
返回值
根据程序执行的情况输出对应的返回值,详情请参见:PsdkErrorCode

function PsdkOsal_Malloc

功能:分配指定的内存 product:all

分配指定的内存。

说明: 开发者根据负载设备操作系统和应用程序的实际情况分配合适的内存。

void *PsdkOsal_Malloc(uint32_t size);

参数
size:需要分配的内存的大小,最大为uint32_t
返回值
分配一个内存为空的内存,当返回值为 NULL 时,请重新分配内存

function PsdkOsal_Free

功能:释放已分配的内存 product:all

释放已分配的内存。

说明: 若在调用PsdkOsal_Malloc() 接口分配内存后,当不需要使用该内存时,可调用本接口释放已分配的内存。

void PsdkOsal_Free(void *ptr);

参数
ptr:指向已分配的内存