注释与语言的极大更新
使用了Doxygen注释风格, 使用了C++混合编程
This commit is contained in:
@@ -1,72 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_AT24C00
|
||||
时间:20220802-2220
|
||||
程序员:梁源康
|
||||
说明:
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "vartable.h"
|
||||
|
||||
#define IIC_ADDR_24C02 0x50
|
||||
#define AT_PAGE 8
|
||||
#define AT_IIC_COM bspIIC0
|
||||
struct struct_AT_Dat AT_Dat={0,0,0};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
void AT_Delay(void){
|
||||
HAL_Delay(5);}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 基础实现
|
||||
void AT_WriteOneByte(char ID,char addr,char dat){
|
||||
IIC_WriteOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat);
|
||||
AT_Delay();}
|
||||
char AT_ReadOneByte(char ID,char addr,char dat){
|
||||
return IIC_ReadOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void AT_WriteByte(char ID,char addr,char *dat,char len){
|
||||
unsigned int member=0;
|
||||
IIC_Start(AT_IIC_COM);
|
||||
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
|
||||
IIC_WaitAck(AT_IIC_COM);
|
||||
IIC_SendByte(AT_IIC_COM,addr);
|
||||
IIC_WaitAck(AT_IIC_COM);
|
||||
do{
|
||||
IIC_SendByte(AT_IIC_COM,dat[member]);
|
||||
IIC_WaitAck(AT_IIC_COM);
|
||||
member++;
|
||||
if(((member+addr)%AT_PAGE)==0){
|
||||
IIC_Stop(AT_IIC_COM);
|
||||
AT_Delay();
|
||||
IIC_Start(AT_IIC_COM);
|
||||
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
|
||||
IIC_WaitAck(AT_IIC_COM);
|
||||
IIC_SendByte(AT_IIC_COM,addr+member);
|
||||
IIC_WaitAck(AT_IIC_COM);}
|
||||
}while(member!=len);
|
||||
IIC_Stop(AT_IIC_COM);
|
||||
AT_Delay();}
|
||||
void AT_ReadByte(char ID,char addr,char *dat,char len){
|
||||
IIC_ReadByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat,len);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void AT_Write_Pack(char ID,struct struct_AT_Dat *AT_Dat){
|
||||
AT_WriteByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
|
||||
void AT_Read_Pack(char ID,struct struct_AT_Dat *AT_Dat){
|
||||
AT_ReadByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1,44 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_AT24C00
|
||||
时间:20220802-2220
|
||||
程序员:梁源康
|
||||
说明:
|
||||
*/
|
||||
#ifndef _XEROLYSKINNER_AT24C00_H
|
||||
#define _XEROLYSKINNER_AT24C00_H
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 写入数据
|
||||
//
|
||||
#pragma pack(1)
|
||||
struct struct_AT_Dat{
|
||||
char Var0;
|
||||
short Var1;
|
||||
int Var2;
|
||||
};
|
||||
#pragma pack()
|
||||
extern struct struct_AT_Dat AT_Dat;
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
void AT_WriteOneByte(char ID,char addr,char dat);
|
||||
char AT_ReadOneByte(char ID,char addr,char dat);
|
||||
void AT_WriteByte(char ID,char addr,char *dat,char len);
|
||||
void AT_ReadByte(char ID,char addr,char *dat,char len);
|
||||
void AT_Write_Pack(char ID,struct struct_AT_Dat *AT_Dat);
|
||||
void AT_Read_Pack(char ID,struct struct_AT_Dat *AT_Dat);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
@@ -1,74 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_Console
|
||||
时间:20220805-0424
|
||||
程序员:梁源康
|
||||
说明:搭建上位机处理
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "vartable.h"
|
||||
#include "string.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 变量和定义
|
||||
//
|
||||
#define console_num(num) (*((num*)(console_buff+1)))
|
||||
#define CONSOLE_BUFF_LEN 32
|
||||
uint8_t console_buff[CONSOLE_BUFF_LEN]={0};
|
||||
struct console_pack consolePack={0,0,0};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
void bsp_ConsoleInit(UART_HandleTypeDef *huart){
|
||||
// 开启空闲中断
|
||||
__HAL_UART_ENABLE_IT(huart,UART_IT_IDLE);
|
||||
// 接收相关内容
|
||||
HAL_UART_Receive_DMA(huart,console_buff,CONSOLE_BUFF_LEN);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_ConsoleJump(UART_HandleTypeDef *huart){
|
||||
// 空闲中断跳转
|
||||
if(__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE)!=RESET){
|
||||
__HAL_UART_CLEAR_IDLEFLAG(huart);
|
||||
HAL_UART_IdleCpltCallback(huart);}}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart){
|
||||
HAL_UART_DMAStop(huart);
|
||||
if(huart==&huart1){
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 按钮识别区
|
||||
if(console_buff[0]==0){
|
||||
switch(console_buff[1]){
|
||||
case 0:
|
||||
printf("按钮0");break;
|
||||
case 1:
|
||||
printf("按钮1");break;
|
||||
default:
|
||||
printf("按钮未知\r\n");break;}}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 包识别区-默认小端接收方式
|
||||
if(console_buff[0]==1){
|
||||
memcpy(&consolePack,console_buff+1,sizeof(struct console_pack));}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 数值识别区
|
||||
if(console_buff[0]==2)printf("2号:%d\r\n",console_num(int));
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
HAL_UART_Receive_DMA(huart,console_buff,CONSOLE_BUFF_LEN);}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1,41 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_Console
|
||||
时间:20220805-0424
|
||||
程序员:梁源康
|
||||
说明:搭建上位机处理
|
||||
*/
|
||||
#ifndef _XEROLYSKINNER_BSP_CONSOLE_H
|
||||
#define _XEROLYSKINNER_BSP_CONSOLE_H
|
||||
#include "usart.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 全包接收
|
||||
//
|
||||
#pragma pack(1)
|
||||
struct console_pack{
|
||||
uint8_t var0;
|
||||
uint16_t var1;
|
||||
uint32_t var2;
|
||||
};
|
||||
#pragma pack()
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
void bsp_ConsoleInit(UART_HandleTypeDef *huart);
|
||||
void bsp_ConsoleJump(UART_HandleTypeDef *huart);
|
||||
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
@@ -1,152 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_IIC
|
||||
时间:20220729-2031
|
||||
程序员:梁源康
|
||||
说明:IIC驱动
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "vartable.h"
|
||||
#include "bsp_IIC.h"
|
||||
char (*bspIIC1[2])(char)={IIC1_SCK,IIC1_SDA};
|
||||
#define bspIIC_SCK(IIC_VAR) bspIIC[0](IIC_VAR)
|
||||
#define bspIIC_SDA(IIC_VAR) bspIIC[1](IIC_VAR)
|
||||
enum{
|
||||
IIC_RESET,
|
||||
IIC_SET,
|
||||
IIC_READ};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 适配程序
|
||||
//
|
||||
// 延时函数
|
||||
void IIC_Delay(void){
|
||||
unsigned char i=0;
|
||||
while(++i);}
|
||||
// IIC1SCK函数
|
||||
char IIC1_SCK(char var){
|
||||
if(var==IIC_RESET){
|
||||
HAL_GPIO_WritePin(IIC_SCK_GPIO_Port,IIC_SCK_Pin,GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if(var==IIC_SET){
|
||||
HAL_GPIO_WritePin(IIC_SCK_GPIO_Port,IIC_SCK_Pin,GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else{
|
||||
return HAL_GPIO_ReadPin(IIC_SCK_GPIO_Port,IIC_SCK_Pin);}
|
||||
}
|
||||
// IIC1SDA函数
|
||||
char IIC1_SDA(char var){
|
||||
if(var==IIC_RESET){
|
||||
HAL_GPIO_WritePin(IIC_SDA_GPIO_Port,IIC_SDA_Pin,GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if(var==IIC_SET){
|
||||
HAL_GPIO_WritePin(IIC_SDA_GPIO_Port,IIC_SDA_Pin,GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else{
|
||||
return HAL_GPIO_ReadPin(IIC_SDA_GPIO_Port,IIC_SDA_Pin);}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
//I2C总线启动信号
|
||||
void IIC_Start(char (*bspIIC[])(char)){
|
||||
bspIIC_SDA(SET);
|
||||
bspIIC_SDA(IIC_SET);
|
||||
bspIIC_SCK(IIC_SET);
|
||||
IIC_Delay();
|
||||
bspIIC_SDA(IIC_RESET);
|
||||
IIC_Delay();
|
||||
bspIIC_SCK(IIC_RESET);}
|
||||
//I2C总线停止信号
|
||||
void IIC_Stop(char (*bspIIC[])(char)){
|
||||
bspIIC_SDA(IIC_RESET);
|
||||
bspIIC_SCK(IIC_SET);
|
||||
IIC_Delay();
|
||||
bspIIC_SDA(IIC_SET);
|
||||
IIC_Delay();}
|
||||
//发送应答或非应答信号
|
||||
void IIC_SendAck(char (*bspIIC[])(char),char ackbit){
|
||||
bspIIC_SCK(IIC_RESET);
|
||||
bspIIC_SDA(ackbit);
|
||||
IIC_Delay();
|
||||
bspIIC_SCK(IIC_SET);
|
||||
IIC_Delay();
|
||||
bspIIC_SCK(IIC_RESET);
|
||||
bspIIC_SDA(IIC_SET);
|
||||
IIC_Delay();}
|
||||
//等待应答
|
||||
char IIC_WaitAck(char (*bspIIC[])(char)){
|
||||
char ackbit;
|
||||
bspIIC_SCK(IIC_SET);
|
||||
IIC_Delay();
|
||||
ackbit = bspIIC_SDA(IIC_READ);
|
||||
bspIIC_SCK(IIC_RESET);
|
||||
IIC_Delay();
|
||||
return ackbit;}
|
||||
//I2C总线发送一个字节数据
|
||||
void IIC_SendByte(char (*bspIIC[])(char),unsigned char byt){
|
||||
unsigned char i;
|
||||
for(i=0; i<8; i++){
|
||||
bspIIC_SCK(IIC_RESET);
|
||||
IIC_Delay();
|
||||
bspIIC_SDA((byt & 0x80)!=0);
|
||||
IIC_Delay();
|
||||
bspIIC_SCK(IIC_SET);
|
||||
byt <<= 1;
|
||||
IIC_Delay();}
|
||||
bspIIC_SCK(IIC_RESET);}
|
||||
//I2C总线接收一个字节数据
|
||||
unsigned char IIC_RecByte(char (*bspIIC[])(char)){
|
||||
unsigned char i, da;
|
||||
for(i=0;i<8;i++){
|
||||
bspIIC_SCK(IIC_SET);
|
||||
IIC_Delay();
|
||||
da <<= 1;
|
||||
if(bspIIC_SDA(IIC_READ))da |= 1;
|
||||
bspIIC_SCK(IIC_RESET);
|
||||
IIC_Delay();}
|
||||
return da;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void IIC_WriteOneByte(char (*bspIIC[])(char),char id,char addr,char dat){
|
||||
IIC_Start(bspIIC);
|
||||
IIC_SendByte(bspIIC,id<<1);
|
||||
IIC_WaitAck(bspIIC);
|
||||
IIC_SendByte(bspIIC,addr);
|
||||
IIC_WaitAck(bspIIC);
|
||||
IIC_SendByte(bspIIC,dat);
|
||||
IIC_WaitAck(bspIIC);
|
||||
IIC_Stop(bspIIC);}
|
||||
|
||||
char IIC_ReadOneByte(char (*bspIIC[])(char),char id,char addr){
|
||||
char temp=0;
|
||||
IIC_Start(bspIIC);
|
||||
IIC_SendByte(bspIIC,id<<1);
|
||||
IIC_WaitAck(bspIIC);
|
||||
IIC_SendByte(bspIIC,addr);
|
||||
IIC_SendAck(bspIIC,0);
|
||||
|
||||
IIC_Start(bspIIC);
|
||||
IIC_SendByte(bspIIC,(id<<1)|0x01);
|
||||
IIC_SendAck(bspIIC,0);
|
||||
temp=IIC_RecByte(bspIIC);
|
||||
IIC_SendAck(bspIIC,1);
|
||||
|
||||
IIC_Stop(bspIIC);
|
||||
return temp;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1,46 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_IIC
|
||||
时间:20220729-2031
|
||||
程序员:梁源康
|
||||
说明:IIC驱动
|
||||
*/
|
||||
#ifndef _XEROLYSKINNER_BSP_IIC_H
|
||||
#define _XEROLYSKINNER_BSP_IIC_H
|
||||
#define IIC_ADDR_24C02 0x50
|
||||
|
||||
extern char (*bspIIC1[2])(char);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 前置程序
|
||||
//
|
||||
void IIC_Delay(void);
|
||||
// 适配单元
|
||||
char IIC1_SDA(char var);
|
||||
char IIC1_SCK(char var);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 前置程序
|
||||
//
|
||||
void IIC_Start(char (*bspIIC[])(char));
|
||||
void IIC_Stop(char (*bspIIC[])(char));
|
||||
void IIC_SendAck(char (*bspIIC[])(char),char ackbit);
|
||||
char IIC_WaitAck(char (*bspIIC[])(char));
|
||||
void IIC_SendByte(char (*bspIIC[])(char),unsigned char byt);
|
||||
unsigned char IIC_RecByte(char (*bspIIC[])(char));
|
||||
|
||||
void IIC_WriteOneByte(char (*bspIIC[])(char),char id,char addr,char dat);
|
||||
char IIC_ReadOneByte(char (*bspIIC[])(char),char id,char addr);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
@@ -1,93 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_Queue
|
||||
时间:20220806-0226
|
||||
程序员:梁源康
|
||||
说明:队列与FIFO函数
|
||||
*/
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 声明
|
||||
struct _Queue {
|
||||
struct _Queue* front;
|
||||
void* member;
|
||||
struct _Queue* rear;
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 主程序
|
||||
struct _Queue* bsp_QueueInit(void) {
|
||||
struct _Queue* list = malloc(sizeof(struct _Queue));
|
||||
if (list == NULL)return NULL;
|
||||
list->front = NULL;
|
||||
list->rear = NULL;
|
||||
list->member = NULL;
|
||||
return list;}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列空检测
|
||||
char bsp_QueueEmpty(struct _Queue *list) {
|
||||
return (list->front == NULL && list->rear == NULL);}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列尾巴处压入成员
|
||||
char bsp_QueuePush(struct _Queue *list,void* member) {
|
||||
struct _Queue* listAdd = malloc(sizeof(struct _Queue));
|
||||
struct _Queue* listFront = list->front;
|
||||
struct _Queue* listRear = list->rear;
|
||||
if (list == NULL)return 1; //防止爆炸
|
||||
if (listAdd == NULL)return 1; //防止爆炸
|
||||
|
||||
listAdd->member = member; //加入聪明仔
|
||||
|
||||
// 空单位初始化
|
||||
if (bsp_QueueEmpty(list)) {
|
||||
list->front = list->rear = listAdd;
|
||||
listAdd->front = listAdd->rear = listAdd;}
|
||||
// 常单位续编
|
||||
else {
|
||||
listAdd->front = listRear; //新节点连接尾巴
|
||||
listRear->rear = listAdd; //尾巴交接新节点
|
||||
listAdd->rear = listAdd; //尾巴自交
|
||||
list->rear = listAdd; //新尾巴
|
||||
}
|
||||
return 0;}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
char bsp_QueuePushCharPtr(struct _Queue* list, char* member, unsigned int len) {
|
||||
char* enter = malloc(len+1);
|
||||
if (enter == NULL)return 1;
|
||||
enter[len] = '\0';
|
||||
strcpy_s(enter,len+1, member);
|
||||
bsp_QueuePush(list,enter);}
|
||||
|
||||
void bsp_QueuePushCharPtrFree(char* member) {
|
||||
free(member);}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列头部弹出成员
|
||||
void* bsp_QueuePop(struct _Queue* list) {
|
||||
struct _Queue* listFront = list->front;
|
||||
struct _Queue* listRear = list->rear;
|
||||
void* result=NULL;
|
||||
if (list == NULL)return NULL; //防止爆炸
|
||||
if (bsp_QueueEmpty(list))return NULL; //寡妇函数
|
||||
|
||||
// 寡妇节点
|
||||
if (listFront== listRear) {
|
||||
list->front = list->rear = NULL;
|
||||
result= listFront->member;}
|
||||
else {
|
||||
list->front = listFront->rear;
|
||||
result= listFront->member;}
|
||||
free(listFront); //抹脖子
|
||||
return result;}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1,43 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_Queue
|
||||
时间:20220806-0226
|
||||
程序员:梁源康
|
||||
说明:队列与FIFO函数
|
||||
*/
|
||||
#ifndef _BSP_QUEUE
|
||||
#define _BSP_QUEUE
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 函数声明
|
||||
// 循环直到执行完全函数
|
||||
#define bsp_QueuePopRunLoopVoid(Queue) \
|
||||
do{ \
|
||||
while(!bsp_QueueEmpty(Queue)) \
|
||||
((void (*)(void))bsp_QueuePop(Queue))(); \
|
||||
}while(0)
|
||||
// 弹出并执行单个函数
|
||||
#define bsp_QueuePopRunIfVoid(Queue) \
|
||||
do{ \
|
||||
if(!bsp_QueueEmpty(Queue)) \
|
||||
((void (*)(void))bsp_QueuePop(Queue))(); \
|
||||
}while(0)
|
||||
// 常用队列处理函数
|
||||
struct _Queue* bsp_QueueInit(void);
|
||||
char bsp_QueueEmpty(struct _Queue* list);
|
||||
char bsp_QueuePush(struct _Queue* list, void* member);
|
||||
void* bsp_QueuePop(struct _Queue* list);
|
||||
void bsp_QueuePushCharPtrFree(char* member);
|
||||
char bsp_QueuePushCharPtr(struct _Queue* list, char* member, unsigned int len);
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
@@ -1,55 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS PART OF XEROLYSKINNER'S PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:MainSystem
|
||||
时间:20220713-2238
|
||||
程序员:梁源康
|
||||
说明:主程序
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
uint32_t FlashAddr = 0x08010000; //起始地址
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
#pragma pack(4)
|
||||
struct struct_bsp_Flash_Pack{
|
||||
char Var0;
|
||||
short Var1;
|
||||
int Var2;
|
||||
}bsp_Flash_Pack={0,0,0};
|
||||
#pragma pack()
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
uint32_t bsp_WriteFlashOnePage(uint32_t *dat,uint32_t num){
|
||||
FLASH_EraseInitTypeDef f;
|
||||
uint32_t PageError = 0; //错误号7
|
||||
HAL_FLASH_Unlock(); //解锁FLASH
|
||||
f.TypeErase = FLASH_TYPEERASE_PAGES; //Flash擦除
|
||||
f.PageAddress = FlashAddr; //擦除地址(起始页)
|
||||
f.NbPages = 1; //擦除1页
|
||||
HAL_FLASHEx_Erase(&f,&PageError); //调用擦除函数
|
||||
for(int i=0;i<num;i++)
|
||||
HAL_FLASH_Program(TYPEPROGRAM_WORD,FlashAddr+i*4,dat[i]); //对FLASH烧写
|
||||
HAL_FLASH_Lock(); //锁住FLASH
|
||||
return PageError;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_ReadFlash(uint32_t *dat,uint32_t num){ //读入一串数据
|
||||
for(int i=0;i<num;i++)
|
||||
dat[i]=*(__IO uint32_t*)(FlashAddr+i*4);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_WriteFlash_Pack(void){
|
||||
bsp_WriteFlashOnePage((uint32_t*)(&bsp_Flash_Pack),sizeof(struct struct_bsp_Flash_Pack));
|
||||
return;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_ReadFlash_Pack(void){
|
||||
bsp_ReadFlash((uint32_t*)(&bsp_Flash_Pack),sizeof(struct struct_bsp_Flash_Pack));
|
||||
return;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1,31 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS PART OF XEROLYSKINNER'S PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:MainSystem
|
||||
时间:20220713-2238
|
||||
程序员:梁源康
|
||||
说明:主程序
|
||||
*/
|
||||
#ifndef _XEROLYSKINNER_BSP_FLASH_H
|
||||
#define _XEROLYSKINNER_BSP_FLASH_H
|
||||
#include "main.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
uint32_t bsp_WriteFlashOnePage(uint32_t *dat,uint32_t num);
|
||||
void bsp_ReadFlash(uint32_t *dat,uint32_t num);
|
||||
void bsp_WriteFlash_Pack(void);
|
||||
void bsp_ReadFlash_Pack(void);
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
Reference in New Issue
Block a user