1 基础
1.1 初始化结构体
typedef struct
{
uint32_t BaudRate;
uint32_t WordLength;
uint32_t StopBits;
uint32_t Parity;
uint32_t HwFlowCtl;
} UART_InitTypeDef;
UART_InitTypeDef Init;
memset(&Init, 0, sizeof(Init));
1.2 初始化数组
uint8_t ID_Name[30];
memset(&ID_Name[0], 0, 30);
1.3 结构体指针
typedef struct
{
__IO uint32_t SR;
__IO uint32_t DR;
__IO uint32_t BRR;
} USART_TypeDef;
USART_TypeDef *Instance;
1.4 memcpy
uint8_t Data_Dst[20];
uint8_t Data_Src[20];
uint8_t RxCount = 20;
memcpy(Data_Dst, Data_Src, RxCount);
1.5 头文件
#ifndef __MAIN_H
#define __MAIN_H
#include <stdio.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif
1.6 指针函数
uint8_t *fun(uint8_t x, uint8_t y);
uint8_t* fun(uint8_t x, uint8_t y);
uint8_t * fun(uint8_t x, uint8_t y);
1.7 函数指针
uint8_t function(uint8_t x, uint8_t y);
uint8_t (*fun)(uint8_t x, uint8_t y);
fun = &function;
fun = function;
1.8 函数指针数组
1.8.1 应用1
void NoneEX(uint8_t data1, uint8_t data2, uint8_t data3);
void Fun1(uint8_t data1, uint8_t data2, uint8_t data3);
void Fun2(uint8_t data1, uint8_t data2, uint8_t data3);
void Fun3(uint8_t data1, uint8_t data2, uint8_t data3);
void (*ExtendCmd[4])(uint8_t, uint8_t, uint8_t) =
{
NoneEX, Fun1, Fun2, Fun3
};
typedef struct
{
uint8_t i;
uint8_t Address;
uint8_t Command;
uint8_t Data1;
uint8_t Data2;
uint8_t Data3;
uint8_t Sum;
} ProtocolStr;
uint8_t T_JIEXI(uint8_t d, ProtocolStr *p)
{
uint8_t Temp;
uint8_t commond[5];
p->i++;
if(p->i == 7)
{
p->Sum = d;
Temp = 0xA5 + p->Address + p->Command + p->Data1 + p->Data2 + p->Data3;
if(Temp == p->Sum)
{
commond[0] = p->Command;
commond[1] = p->Data1;
commond[2] = p->Data2;
commond[3] = p->Data3;
ExtendCmd[p->Command & 0x0F](p->Data1, p->Data2, p->Data3);
}
}
}
1.8.2 应用2
void CameraSONYZoomWide(uint8_t data1, uint8_t data2);
void (*CameraZoomWidetab[])(uint8_t data1, uint8_t data2) =
{
NO_ZoomWide, CameraSONYZoomWide
};
void (*CameraZoomWide)(uint8_t data1, uint8_t data2);
void InitCameraFun(void)
{
CameraZoomWide = CameraZoomWidetab[cameratype];
}
void ZoomWide(uint8_t data1, uint8_t data2)
{
(*CameraZoomWide)(data1, data2);
}
1.9 指针变量作为形参
float temperature=0.0;
float humidity=0.0;
uint8_t dht11Read(float *temp, float *humi)
{
*temp = 25.6;
*humi = 60.3;
}
int main()
{
dht11Read(&temperature, &humidity);
}