ARM串口命令解析代码的编写:在驱动程序时,输入相应的命令点亮对应的LED灯,在裸机中添加string.h字符串比较的函数

一、代码

1.在string.h中写函数声明

#ifndef __STRING_H__
#define __STRING_H__

int strcmp(const char *s1, const char *s2);

#endif

//s1表示一个字符串
//s2表示第二个字符串
//返回值:s1 = s2 返回 0
          s1 > s2 返回 一个大于0的数
            s1 < s2 返回 一个小于0的数

//为什么用const修饰?
变量里的数据只能被访问,而不能被修改
#include "string.h"
int strcmp(const char *s1, const char *s2)
{
    while (*s1 != '\0')
    {
        if (*s1 != *s2)
        {
            return (*s1 - *s2);
        }
        s1++;
        s2++;
    }
    return (*s1 - *s2);
}

 //判断s1是否到结尾\0(如果没有到结尾那么就俩个字符串进行比较)
    //如果判断不相等
        //那么返回
    //如果判断相等
        //那么判断下一个字符s1++,s2++
 //判断s1已经到结尾了,还没有比较出来,那么返回差值

二、可以应用于ARM点灯,输入led1on,通过字符串比较的函数,点亮相应的灯,在command.c中还应该有以下代码

#include "command.h"
#include "string.h"
#define NUM  2

command_t cmd_arr[NUM] = {
    [0] = {
        .cmd_str = "led1on",
        .gpios = GPIOE,            //调用组
        .pins = GPIO_PIN_10,        //引脚
        .state = GPIO_SEF,            //引脚的输出状态
        .hal_gpio_write_p = hal_gpio_write,    //调用函数
    },
    
    [1] = {
        .cmd_str = "led1off",
        .gpios = GPIOE,            //调用组
        .pins = GPIO_PIN_10,        //引脚
        .state = GPIO_RESEF,            //引脚的输出状态
        .hal_gpio_write_p = hal_gpio_write,    //调用函数
    }

};
        
command_t * find_command(const char *uart_str)
{
    unsigned int i;
    for (i = 0; i < NUM; i++)
    {
        if(!strcmp(uart_str, cmd_arr[i].cmd_str))
        {
            return &cmd_arr[i];
        }
    }
    return 0;
}

三、需要强调的是结构体变量初始化的方式

//初始化一个结构体变量

//结构体变量初始化方式1
comand_t cmd_arr = {"led1on",GPIOE,FPIO_PIN_10,GPIP_SET,hal_gpio_write};

//结构体变量初始化方式2
cmd_arr.cmd_str = "led1on";
cmd_arr.gpios = GPIOE;
cmd_arr.pins = GPIO_PIN_10;
cmd_arr.hal_gpio_write_p = hal_gpio_write;

//结构体变量初始化方式3
command_t cmd_arr = {
    .cmd_str = "led1on";
    .gpios = GPIOE;
    .pins = GPIO_PIN_10;
    .hal_gpio_write_p = hal_gpio_write;
};



//初始化俩个结构体变量
    //方式1
  command_t  cmd_arr[2] = {
        {"led1on",GPIOE,GPIO_PIN_10,GPIO_SET,hal_gpio_write},
        {"led1off",GPIOE,GPIO_PIN_10,GPIO_RESET,hal_gpio_write}
    };

    //方式2
    cmd_arr[0].cmd_str = "led1on";
    cmd_arr[0].gpios = GPIOE;
    cmd_arr[0].pins = GPIO_PIN_10;
    cmd_arr[0].state = GPIO_SET;
    cmd_arr[0].hal_gpio_write_p = hal_gpio_write;
    cmd_arr[1].cmd_str = "led1off";
    cmd_arr[1].gpios = GPIOE;
    cmd_arr[1].pins = GPIO_PIN_10;
    cmd_arr[1].state = GPIO_RESET;
    cmd_arr[1].hal_gpio_write_p = hal_gpio_write;

    //方式3
    command_t  cmd_arr[NUM]  = {
    [0] = {
        .cmd_str = "led1on",
        .gpios = GPIOE,
        .pins = GPIO_PIN_10,
        .state = GPIO_SET,
        .hal_gpio_write_p = hal_gpio_write,
    }, 
    [1] = {
        .cmd_str = "led1off",
        .gpios = GPIOE,
        .pins = GPIO_PIN_10,
        .state = GPIO_RESET,
        .hal_gpio_write_p = hal_gpio_write,
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值