当前位置: 首页 > wzjs >正文

网站如何设置二级域名服装公司网站设计

网站如何设置二级域名,服装公司网站设计,wordpress怎么添加用户中心页面,大唐工作室 网站制作文章目录 一、核心设计思想二、命令系统实现详解(含完整注释)1. 示例命令函数实现2. 初始化命令系统3. 命令注册函数4. 命令查找函数5. 命令执行函数 三、命令结构体(cmd\_t)四、运行效果示例五、小结 在嵌入式系统的命令行控制台…

文章目录

    • 一、核心设计思想
    • 二、命令系统实现详解(含完整注释)
      • 1. 示例命令函数实现
      • 2. 初始化命令系统
      • 3. 命令注册函数
      • 4. 命令查找函数
      • 5. 命令执行函数
    • 三、命令结构体(cmd\_t)
    • 四、运行效果示例
    • 五、小结

在嵌入式系统的命令行控制台(Shell)中,命令解析模块扮演着关键角色。它负责:

  1. 接收字符串命令;
  2. 拆分命令参数;
  3. 查找匹配的命令函数;
  4. 调用命令对应的处理函数。

本文基于 cmd.c 实现讲解一个简单而高效的命令注册与执行框架。


一、核心设计思想

命令系统基于以下数据结构和接口实现:

  • 命令表(cmd_table):保存所有注册命令;
  • 命令函数指针(cmd_func_t):指向具体执行逻辑;
  • cmd_execute():接收命令字符串,拆分参数并调用对应命令函数;
  • cmd_register():注册命令;
  • cmd_find():通过命令名查找。

二、命令系统实现详解(含完整注释)

#include "cmd.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>#define CMD_TABLE_MAX 32  // 最多支持 32 个命令// 命令表:用于保存所有注册的命令
static cmd_t cmd_table[CMD_TABLE_MAX];
static int cmd_count = 0; // 当前注册命令数

1. 示例命令函数实现

// help 命令:打印帮助信息
int cmd_help(int argc, char *argv[])
{printf("help: Show this message\r\n");// 可扩展:遍历 cmd_table 打印所有命令和说明return 0;
}// echo 命令:回显输入参数
int cmd_echo(int argc, char *argv[])
{for (int i = 1; i < argc; i++){printf("%s ", argv[i]);}printf("\r\n");return 0;
}

2. 初始化命令系统

// 初始化命令系统:注册内置命令
void cmd_init(void)
{cmd_register("help", cmd_help, "Show help");cmd_register("echo", cmd_echo, "Echo args");
}

3. 命令注册函数

// 注册命令:添加命令名、函数指针和帮助信息到命令表
int cmd_register(const char *name, cmd_func_t func, const char *help)
{if (cmd_count >= CMD_TABLE_MAX)return -1; // 命令表满了,注册失败// 复制命令名到表项(限制最大长度)strncpy(cmd_table[cmd_count].name, name, CMD_NAME_LEN - 1);cmd_table[cmd_count].name[CMD_NAME_LEN - 1] = '\0';// 设置函数指针和帮助信息cmd_table[cmd_count].func = func;cmd_table[cmd_count].help = help;cmd_count++; // 更新命令数量return 0;
}

4. 命令查找函数

// 查找命令:通过命令名在命令表中查找
cmd_t *cmd_find(const char *name)
{for (int i = 0; i < cmd_count; i++){if (strcmp(cmd_table[i].name, name) == 0)return &cmd_table[i];  // 找到并返回指针}return NULL;  // 未找到
}

5. 命令执行函数

// 执行命令行字符串:拆分参数并调用命令函数
int cmd_execute(const char *cmdline)
{if (cmdline == NULL || *cmdline == '\0')return -1;  // 空命令行,忽略// 使用 buf 保存一份可修改的命令行char buf[128];strncpy(buf, cmdline, sizeof(buf) - 1);buf[sizeof(buf) - 1] = '\0';char *argv[CMD_MAX_ARGS];  // 参数数组int argc = 0;// 使用 strtok 拆分参数char *token = strtok(buf, " ");while (token && argc < CMD_MAX_ARGS){argv[argc++] = token;token = strtok(NULL, " ");}if (argc == 0)return -1;  // 没有有效参数// 查找对应命令cmd_t *cmd = cmd_find(argv[0]);if (!cmd){printf("Unknown command: %s\r\n", argv[0]);return -1;  // 未知命令}// 调用命令函数,传递 argc 和 argvreturn cmd->func(argc, argv);
}

三、命令结构体(cmd_t)

// cmd.h 中结构定义示例
#define CMD_NAME_LEN  16
#define CMD_MAX_ARGS  8typedef int (*cmd_func_t)(int argc, char *argv[]); // 命令处理函数类型typedef struct {char name[CMD_NAME_LEN];   // 命令名称cmd_func_t func;           // 命令处理函数const char *help;          // 帮助字符串
} cmd_t;

四、运行效果示例

假设输入如下命令:

echo Hello STM32

Shell 处理流程如下:

  1. 输入字符拼接成字符串;

  2. 回车后传入 cmd_execute()

  3. strtok 拆分为 argv = {"echo", "Hello", "STM32"}

  4. 查表找到 cmd_echo

  5. 调用 cmd_echo(argc=3, argv)

  6. 控制台输出:

    Hello STM32
    

五、小结

这个命令系统具备以下优点:

  • 轻量级:适合裸机或RTOS;
  • 易扩展:添加命令只需实现函数并调用 cmd_register()
  • 通用接口:命令参数解析和传递简洁统一;
  • 结构清晰:注册、查找、执行职责分离。

适用于嵌入式项目中需要人机交互或调试接口的场景,例如串口控制、调试参数设置、模块测试等。


http://www.dtcms.com/wzjs/554743.html

相关文章:

  • 网站正在建设中html请问做网站需要什么软件
  • 宁波网站建设工作室wordpress 网站收录
  • 凡客建站登录入口个人网站做贷款广告
  • 可以做机械设计接单的网站phpcms多个网站
  • 建设网站的申请信用卡分期深圳企业网络推广运营技巧
  • 东阳网站建设微信开发企业策划书ppt
  • 网站搭建与网站建设青岛网站美工
  • 几何印花图案设计网站网站建设下坡路
  • 微妙音门户网站建设机智云物联网开发平台
  • 网站建设saas关于建设殡葬网站的报告范文
  • 300网站建设没学历可以学什么技术
  • 江西网站建设与推广北京手机网站设计公司
  • 漳州网站建设网站运营设计说明100字通用
  • 网网站开发站制作公司创业 做网站
  • 宁波网站建站推广dede网站qq类资源源码
  • 网站网络营销公司wordpress v5.2.2安装
  • 绍兴手机网站建设如何做网站的埋点
  • 泉州网站设计网站开发服务公司
  • 刷赞网站推广软件国家企业年报申报入口官网
  • 益保网做推广网站吗?短网址生成在线
  • 江西省建设职业培训学校网站wordpress4.5 下拉菜单
  • 鞍山手机网站建设网络架构中sdn是指
  • 怎么用代码做网站网页一键转换wordpress
  • 展示网站建设价格.net网站开发实例
  • 做pc端网站精英成都互联网公司十强
  • 房地产开发公司网站建设返利优惠券网站
  • 网站建设合作品牌如何做一个属于自己的网站
  • 海东高端网站建设价格做公司网站需要什么程序
  • 做好网站建设对企业有什么作用苏州建站模板系统
  • 襄阳市住房和城乡建设局网站企业网站模板观叫湖南岚鸿团队