在STF103ZET6移植了Letter shell

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

一个功能强大的嵌入式shell

letter shell是一个C语言编写的,可以嵌入在程序中的嵌入式shell,主要面向嵌入式设备,以C语言函数为运行单位,可以通过命令行调用,运行程序中的函数

相对2.x版本,letter shell 3.x增加了用户管理,权限管理,以及对文件系统的初步支持

此外3.x版本修改了命令格式和定义,2.x版本的工程需要经过简单的修改才能完成迁移

若只需要使用基础功能,可以使用letter shell 2.x版本

使用说明可参考Letter shell 3.0 全新出发

如果从3.0版本迁移到3.1以上版本,请注意3.1版本对读写函数原型的修改

一、功能

  • 命令自动补全
  • 快捷键功能定义
  • 命令权限管理
  • 用户管理
  • 变量支持
  • 代理函数和参数代理解析

二、在接口方面的注意事项

1.函数的接收

#include "shell_port.h"
#include "shell.h"
#include "stm32f10x_usart.h"
volatile uint8_t Flag=0;

volatile u8 USARTA_BUF[10] = {0}; 
volatile u8 USART1_BUF[10] = {0};
volatile u8 USART1_BUF_LEN = 0;
volatile u8 USART1_BUFA_LEN = 0;
volatile u8 USART1_REC_FLAG = 0;
void USART1_IRQHandler(void)
{
    static u8 res = 0;
    if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
    {
        res = USART_ReceiveData(USART1);
        if(USART1_BUF_LEN < 200)
            USART1_BUF[USART1_BUF_LEN++] = res;
        
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);    
    } 
    if(USART_GetITStatus(USART1,USART_IT_IDLE) != RESET)
    {
        if(!Flag)
        {
            USART_ReceiveData(USART1);    //一定要读
        Flag=1;
        USART1_BUFA_LEN = USART1_BUF_LEN;
            for(u8 k=0;k<USART1_BUF_LEN;k++)
            USARTA_BUF[k] = USART1_BUF[k];
            
        memset((void*)USART1_BUF,0,USART1_BUF_LEN);
        USART_ClearITPendingBit(USART1,USART_IT_IDLE);
        USART1_BUF_LEN=0;
        }
        else
        {
                    USART_ReceiveData(USART1);    //一定要读
                    USART_ClearITPendingBit(USART1,USART_IT_IDLE);    
                    USART1_BUF_LEN=0;

        }

    }
}

2.主函数

我这里把shellHandler放在main函数出来,原文章则放在中断处理,缺点是串口发送数据会跑死。

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "shell_port.h"
#include "shell.h"
 extern  volatile uint8_t Flag;
extern volatile u8 USART1_BUFA_LEN;
 extern volatile u8 USARTA_BUF[200]; 
int main(void)
{
    
while(1)
    {
        uint8_t i=0;
        if(Flag==1) 
        {
            
            
            for(i=0;i<USART1_BUFA_LEN;i++)
            shellHandler(&shell, USARTA_BUF[i]);
            memset(USARTA_BUF,0,USART1_BUFA_LEN);
            USART1_BUFA_LEN=0;
            Flag =0;
        }
    }
 }
#include "shell_port.h"
#include "shell.h"
#include "stm32f10x_usart.h"
Shell shell;
 
char shellBuffer[512];
/**
 * @brief 用户shell写
 * 
 * @param data 数据
 */
signed short userShellWrite(char* data,unsigned short len)
{
	int i;
	
	for(i=0;i<len;i++){
		USART_SendData(USART1, (uint8_t) data[i]);
		/* 等待发送完毕 */
		while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); 		
	}
 
	return 0; 	
}

总结

原博主:letter-shell: letter shell一个嵌入式小型shell,特别适用于单片机系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值