stm32 函数解耦写法

本文介绍了如何在嵌入式系统中使用自定义结构体LoopFunc_t来管理循环函数,包括结构体定义、初始化、注册函数(如breathingLamp)、卸载函数以及在主循环中调用这些函数的过程。
摘要由CSDN通过智能技术生成

❤️作者主页:嵌入式_源

❤️作者简介:记录学习

❤️点赞 👍 收藏 ⭐再看,养成习惯

1.定义一个结构体

typedef struct LoopFuncT{
    void (*LoopCallBack)(void);
    uint8_t funcName[50];
}LoopFunc_t;

2.定义结构体数组

#define LOOP_FUNC_SIZE 20
LoopFunc_t loopFunc[LOOP_FUNC_SIZE];

3.在注册循环函数之前一定要初始化结构体

void mainInit(void)
{
    for (int i = 0; i < LOOP_FUNC_SIZE; ++i) {
        loopFunc[i].LoopCallBack=NULL;
        memset(loopFunc[i].funcName,0,sizeof(loopFunc[i].funcName));
    }
}

3.注册循环函数,需要实现哪个函数就注册谁

void registerLoopCallBack(LoopFunc_t loopF){
    for (int i = 0; i <LOOP_FUNC_SIZE; ++i) {
        if (loopFunc[i].LoopCallBack==NULL){
            loopFunc[i].LoopCallBack=loopF.LoopCallBack;
            strncpy(loopFunc[i].funcName,loopF.funcName, strlen(loopF.funcName));//在此之前初始化结构体
            return;
        }
    }
}
//例如 
     LoopFunc_t loopFunc;//定义结构体变量
    loopFunc.LoopCallBack=breathingLamp;//初始化值
    strcpy(loopFunc.funcName,"breathingLamp");
    registerLoopCallBack(loopFunc);//注册调用

void breathingLamp(void){
    static uint32_t count=0;
    static bool flag=true;
    if (flag){
        count=count+6;
    } else{
        count=count-6;
    }
    if (4500==count)
    {
        flag=false;
    }
    if (0==count)
    {
        flag=true;
    }
    HAL_Delay(1);
    setRGBColor(count,count,count);
}

4.卸载循环函数

/**
 * 卸载循环函数
 * @param funcName: 函数名称
 */
void unRegisterLoopCallBack(uint8_t * funcName){
    for (int i = 0; i <LOOP_FUNC_SIZE; ++i) {
        if (strcmp(funcName,loopFunc[i].funcName)==0){
            loopFunc[i].LoopCallBack=NULL;
            memset(loopFunc[i].funcName,0,sizeof(loopFunc[i].funcName));
            return;
        }
    }
}
//例子
unRegisterLoopCallBack("breathingLamp");

4.main函数中循环调用

  while (1)
  {
      for (int i = 0; i < LOOP_FUNC_SIZE; ++i) {
          if (loopCallBack[i] !=NULL){
              loopCallBack[i]();
          }
  }
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值