如下是在将安富莱的dac8563模块对接到潘多拉开发板RT-Thread SPI设备框架中时导出到RT-Thread的自定义MSH命令,需要注意的是MSH传入的是字符串,需要自行对字符串进行解析处理。

#include "stdlib.h"    /* 使用其中的函数:atoi(); */
#include "string.h"   /* 使用其中的函数:strncmp(); */static void dac8563_spi_sample(int argc, char *argv[])
{int16_t i16_volt = 0;rt_kprintf("input para is: %s %s %s \n", argv[0], argv[1], argv[2]);if (3 != argc){rt_kprintf("error cmd! please input as: (A 5000) \n");return;}if (!strncmp("A", argv[1], 1))   //两个字符串在比较的长度内都相等则返回0{i16_volt = atoi(argv[2]);DAC8563_set_output_volt(WRITE_AND_UPDATE_DAC_A, i16_volt);}else if (!strncmp("B", argv[1], 1)){i16_volt = atoi(argv[2]);DAC8563_set_output_volt(WRITE_AND_UPDATE_DAC_B, i16_volt);}
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(dac8563_spi_sample, spi dac8563 sample);

在MSH中输入的指令如下所示:

  • 命令的名称为"dac8563_spi_sample",存储于argv[0]
  • 第一个参数为"A",存储于argv[1]
  • 第2个参数为"8000",存储于argv[2]
  • 共有3个字符串,因此argc为3,各字符串的内容被存储与argv[]的各个元素中

在MSH中传入到程序的各个参数均为字符串形式,因此需要用户自行处理其中的参数,也就是说需要做严格的参数检查或者进行类型的转换。

因为dac8563有两个电压输出通道,因此设置输出电压时就需要指定是哪个通道(A或B)?具体设置的电压值(-10000~+10000mV)?

命令格式如上图所示,argv[1]中存储的内容会被解析为电压输出通道,因此就需要用strncmp("A", argv[1], 1)函数进行比对。若argv[1]中存储的字符串前1个字符和“A”相等,则strncmp的返回值为0,否则为1。为0表示当前操作通道为A,则进行通道A输出电压的设置。具体设置的值存储在argv[2]中,是以字符串格式进行存储的,因此需要将字符串转换为整型数。这里使用到了stdlib.h中的函数atoi()。该函数可将输入的字符串转换为带符号整型,如“-5678”转换为整型的-5678,“9860”转换为整型的9860。

【atoi函数】

头文件 stdlib.h

C语言中有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、daolong、float类型的数字。
函数原型:int atoi(const char* nptr);

示例:
char *str="996";
int num=atoi(str);
执行后,num的值被初始化为996

【strncmp函数】

头文件 string.h  

函数名: strncmp  

函数功能: 字符串比较  

函数用法: int strncmp(char *str1, char *str2, int maxlen);  

说明:此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])。

RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析相关推荐

  1. RT-Thread中自定义 FinSH 命令

    在使用RT-Thread中的FinSH 命令时,除了系统默认的FinSH命令以外,我们还可以自定义FinSH命令.下面就来演示一下如何自定义FinSH命令.关于FinSH命令的详细用法请参考官方资料h ...

  2. python中自定义函数如何传递动态参数_python 函数的动态参数

    1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...

  3. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  4. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  5. Linux中使用curl命令发送带参数的get请求和post请求

    1. curl与wget 命令的区别 相似之处:wget 和 cURL 都可以下载内容,都可以向互联网发送请求并返回请求项,也可以进行 HTTP POST 请求,它们都是命令行工具,可以设计成可脚本化 ...

  6. bsd协议开源框架tcp服务器,搬运RT Thread中BSD Socket实现UDP及TCP例子

    /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * ...

  7. 服务器中使用Top命令后,参数解释

    一.问题描述   top命令是最方便可用的服务器监控命令,可以看出服务器的当前负载量,CPU占用率,内存占用率等重要信息. 展示两种情景: 情景一:top命令即可:要是想要退出就按q即可 情景二:在情 ...

  8. linux遍历所有文件包含字符串,Linux系统中使用grep命令,查找包含某字符串的文件...

    我们在windows查找包含包含某些文字的文件时,通过高级查找工具可以很方便的做到,一次在linux要用到这一功能时却犯了难,我们知道使用find -name 命令可以根据文件名来查找,但具体到文件里 ...

  9. linux中find查找命令的mtime参数使用方法说明

    mtime的含义 mtime查询的是文件last modified时间,其中最让人迷惑的就是参数 +N . N . -N 三个参数的意义了. 实例讲解 N * 24 +1 内表示 1 * 24 +24 ...

最新文章

  1. SAP WebIDE编辑器的主题设置
  2. Android中1像素Activity进程保活
  3. python socket 大文件_python之socket运用之传输大文件
  4. 重构-改善既有代码的设计 (该书写于1999)培训之一
  5. Goroutine心跳检测
  6. 谷歌电子市场学习笔记第一天之上
  7. java中this有什么作用_Java中this有什么用
  8. java后台生成内嵌logo的二维码图片以及添加文字
  9. 提升Windows xp系统运行速度的九大技巧
  10. 几种智能机器人室内定位方法对比
  11. 多粒度网络(MGN)的结构设计与技术实现
  12. 函数声明应该写在什么位置?main函数里面还是前面?(都可以,只要在调用语句的前面即可)
  13. 计算机学院主管学生日常工作的是,学生会的年度计划书(网络版)doc(完整版)...
  14. 直播APP软件开发,直播系统开发的技术架构揭秘
  15. 夕阳无限好 只是近黄昏
  16. UG NX 三维PMI标注培训
  17. getElementById 用法的一个技巧
  18. 使用matlab对输入数据进行卡尔曼滤波
  19. linux c thread,Linux C 多线程
  20. 告别电子小白,8个优选DS1302数字时钟方案大合辑

热门文章

  1. 为什么SimpleDateFormat不是线程安全的?
  2. 左右滑动实现activity之间的跳转
  3. Android 屏幕灭屏亮屏广播,屏幕灭屏亮屏监听,广播实现按键监听
  4. table 权限 展示页面
  5. mongoose $sum
  6. redis 4.0.9 centos7 双机集群安装
  7. geoserver动态颜色参数样式、动态sql配置实现
  8. SELECT TOP n 性能测试
  9. swagger2 分组
  10. .f' '或者.F' '或者string.format(args)