基于MDK平台 cortex-M3 shell 的实现

本文介绍了如何在MDK平台上实现Cortex-M3处理器的Shell功能,以简化代码测试。作者分享了从U-BOOT和RTT-Shell中汲取灵感并简化后的Shell代码,包括命令登记、Console接口和Shell处理。通过示例代码,展示了如何使用和注册命令,并提供了命令处理函数。此外,还包含了删除字符、读取行和解析行等实用函数的实现。
摘要由CSDN通过智能技术生成

    每次写完代码最头疼的就是测试,大多数时间都得花在这里。要么用串口调试助手、要么用上位机。至于串口调度助手效率,大家都懂的。但又不想每次都写一个上位机、闲暇之余模仿u-boot和rtt-shell 写了一个shell,大多数代码都来自U-BOOT的、做了小小的阉割。

使用方法

/*在需要登记命令的文件内包含shell.h、console.h两个头文件  */

例:

REG_CMD                                            --命令登记宏

(

    printconf,                   --命令名

   3,                                --命令的最大参数个数

  do_printconf,             --命令处理函数(函数的类型遵循      int  (*cmd_callback)(struct cmd_tbl_t *, int argc, char **argv))

    "显示系统配置",     --简单的使用说明

    "打印系统配置信息."                      --详细使用说明

);

另外由于所有的命令列表都编译到了cmdlist代码段,所以需要在编译器中设置防止cmdlist被优化。



暂时没心思写详细说明,直接给出代码。

代码主要由四个文件组成(Console.c、Console.h、shell.c、shell.h)

Console提供打印移植接口

/*console.h*/

#ifndef _CONSOLE_H_

#define _CONSOLE_H_

#include "app_type.h"

 

void console_init(void);

void console_putc(const char c);

void console_puts(const char * s);

bool console_get(char  *c);

char console_getc(void);

                                                              /*---对输入格式化字符串进行检测---*/

void console_printf (const char *fmt, ...) __attribute__((format(printf,1,2)));

#endif  

/*console.c*/

#include "includes.h"

#include <stdio.h>

#include <stdarg.h>

#include <stdbool.h>

#include <string.h>

 

 

/**==========================================================

 *@brief 控制台初始化

 *@param none

 ==========================================================*/

void console_init(void){}

/**==========================================================

 *@brief 输出一个字符到串口控制台

 *@param c

 ==========================================================*/

void console_putc(const char c){}

 

/**==========================================================

 *@brief 输出一个字符串到串口控制台

 *@param s

 ==========================================================*/

void console_puts(const char * s){}

 

/**==========================================================

 *@brief 从串口控制台获取一个输入字符

 *@retval true:成功获取

 ==========================================================*/

bool console_get(char  *c){}

 

/**==========================================================

 *@brief 从串口控制台获取一个输入字符

 *@retval c

 *@attetion 阻塞方式调用

 ==========================================================*/

char console_getc(void){}


static char printbuffer[128];

/**==========================================================

 *@brief 打印一个格式化字符串到串口控制台

 *@retval 

 ==========================================================*/

void console_printf (const char *fmt, ...)

{

        va_list args;                                          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值