商城网站 前置审批,深圳品牌设计工作室,荆州市城市建设档案馆网站,网站到期域名怎么解决假设我要编写一个自己的指令脚本#xff0c; 来读取MCU的关键信息#xff0c;关键字为mcu#xff0c; 文件命名为shell_mcu.c#xff1b; 当输入“mcu rd 0”时显示MCU的FLASH大小#xff0c;输入“mcu rd 1”时读取MCU的唯一ID信息。shell_mcu.c源代码#xff1a;/*****…假设我要编写一个自己的指令脚本 来读取MCU的关键信息关键字为mcu 文件命名为shell_mcu.c 当输入“mcu rd 0”时显示MCU的FLASH大小输入“mcu rd 1”时读取MCU的唯一ID信息。shell_mcu.c源代码/*********************************Copyright (c)************************************* FIVE工作组****---------------------------------File Info------------------------------------** File Name: shell_mcu.c** Last modified Date: 2017/9/17 15:13:57** Last Version: V1.0** Description: shell测试****------------------------------------------------------------------------------** Created By: wanxuncpx** Created date: 2017/9/17 15:14:08** Version: V1.0** Descriptions: none**------------------------------------------------------------------------------** HW_CMU: STM32F103** Libraries: STM32F10x_StdPeriph_Lib_V3.5.0** version V3.5*******************************************************************************//******************************************************************************更新说明:******************************************************************************//*************************************************************************************************************** 编 译 控 制 **************************************************************************************************************/#define MCU_SHELL //注释掉时屏蔽iap shell功能#include xc_shell.h //Shell支持文件,含bool,uint8_t..以及串口数据收发操作/*************************************************************************************************************** 文件引用部分 **************************************************************************************************************//*---------------------** 模块驱动引用*----------------------*///#include net_w5500.h#ifdef MCU_SHELL/**************************************************************************************************************** Shell实例 ****************************************************************************************************************//*---------------------** CLI指令服务*----------------------*/extern bool Shell_MCU_Service(void * pcBuff, uint16_t len );/*---------------------** CLI 结构*----------------------*/const Cmd_Typedef_t CLI_McuMsg{//识别关键字mcu,//帮助内容[mcu contorls]\r\n mcu rd \t\t- Read FLASH information.\r\n\r\n,//处理函数Shell_MCU_Service,//附带数据0,#ifdef SHELL_USE_YMODEM//存储介质NULL,#endif};/*---------------------** CLI链表节(输出)*----------------------*/Cmd_List_t McuList {CLI_McuMsg ,NULL}; //IAP指令链表/*************************************************************************************************************** 函 数 声 明 ***************************************************************************************************************//******************************************************************************/ 函数功能:STM32F103控制函数/ 修改日期:2015/7/14 20:22:02/ 输入参数:none/ 输出参数:none/ 使用说明:需要执行约10s******************************************************************************/static bool FLASH_ioctl(uint8_t cmd,void * param){#define UID_ADDR 0x1FFFF7E0 //闪存容量寄存器,值对应KB单位#define MAC_ADDR 0x1FFFF7E8 //MCU的唯一ID号,共12个字节#define UID_SIZE 2 //UID的字节数#define MAC_SIZE 12 //MAC的字节数//step1: 检查参数if(!param)return false;//step2: 处理数据switch(cmd){case 0 : { //获取FLASH的的UIDuint16_t * ptDst (uint16_t *)((uint32_t)param1);*ptDst *(uint16_t *)UID_ADDR;*(uint8_t *)param UID_SIZE;return true;}case 1 : { //获取芯片的MAC地址uint32_t * ptDst (uint32_t *)((uint32_t)param1);uint32_t * ptSrc (uint32_t *)MAC_ADDR;*ptDst *ptSrc;*ptDst *ptSrc;*ptDst *ptSrc;*(uint8_t *)param MAC_SIZE;return true;}default:return false;}}/******************************************************************************/ 函数功能:文件系统Shel指令处理/ 修改日期:2013/9/10 19:04:15/ 输入参数:输入当前的程序版本/ 输出参数:none/ 使用说明:none******************************************************************************/bool Shell_MCU_Service(void * pcBuff, uint16_t len ){uint8_t *ptRxd; //用于接收指令处理int i;uint16_t retval;uint8_t buff[32];//处理指令//--------------------------------------------------------------------------ptRxd (uint8_t *)pcBuff;if(StrComp(ptRxd,rd )) //读取FLASH信息{int wval;if(1 ! sscanf((void *)ptRxd,%*s%d,wval) )return false;if( wval2 )return false;if(0wval) {FLASH_ioctl(0,buff);retval *(uint16_t *)(buff1) ;printf(-Flash:\t%dKB\r\n,retval);return true;}else if(1wval) {FLASH_ioctl(1,buff);printf(-MAC:\t );for(i0; iprintf(%02X\r\n,buff[i1]);return true;}else return false;}else if(StrComp(ptRxd,help\r\n)) //指令帮助{shell_SendStr((void *)CLI_McuMsg.pcHelpStr);return true;}else return false;}/***************************************************************************************************************** END ******************************************************************************************************************/#endif5.2 实现步骤1) 将该文件添加到工程下。2) 在main.c中用extern 引用McuList源代码为/*---------------------** Shell指令链表*----------------------*/extern Cmd_List_t McuList;3)在main.c初始化时添加//----------------------------------------------------------//step1: shell初始化shell_Init(115200,ledx_cfg); //初始化shell接口CLI_AddCmd(McuList); //添加模块指令到链表4)编译工程文件。5)下载到开发板运行即可在终端下看到新支持的CLI指令1 大家可根据此模板和方法添加许多自己的指令和功能2 限于篇幅Ymodem文件传输IAP升级、RTOS支持等将在下一期为大家讲解 [1] [2] 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播或不应无偿使用请及时通过电子邮件或电话通知我们以迅速采取适当措施避免给双方造成不必要的经济损失。