嵌入式C语言秘籍_1

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>//printf函数头文件
#include <string.h>//memcpy函数头文件

#ifdef __cplusplus
extern "C" {
#endif

//User

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

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; //赋值1
fun = function;  //赋值2

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;       //  Pan Speed
  uint8_t Data2;       //  Tilt Speed
  uint8_t Data3;       //  Number
  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);
  //运行结果temperature=25.6, humidity=60.3
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米兰的无线电

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值