STM32之基于一款开源嵌入式shell工具移植的学习笔记

时间:2024-05-20 22:27:31

       对于嵌入式应用而言,尤其是对于没有操作系统,裸机运行的嵌入式应用,迫切的需要一种高效快捷的调试手段进行嵌入式应用的开发,之前在网上找到一个网友写的开源的嵌入式shell工具,它的源码的地址为https://github.com/NevermindZZT/letter-shell,其代码结构如下图所示:

STM32之基于一款开源嵌入式shell工具移植的学习笔记

现将我在STM32F767上基于串口的移植过程整理如下:

1、首先在工程目录下新建一个SHELL文件夹,将上图中的四个文件拷贝到SHELL文件夹下,同时将该目录添加到头文件目录中,并将.c文件添加到项目中

STM32之基于一款开源嵌入式shell工具移植的学习笔记

STM32之基于一款开源嵌入式shell工具移植的学习笔记

2、编译工程,发现很多函数中报循环变量i的错误,将相关函数循环变量i的定义提到函数的前面,即可消除相关错误

STM32之基于一款开源嵌入式shell工具移植的学习笔记

3、同时将 shell.c中的shellInit函数里面的代码位置作如下替换,不然会报错:

STM32之基于一款开源嵌入式shell工具移植的学习笔记

4、定义shell对象,并对其进行相关初始化,同时这里我采用中断的方式处理串口读到的数据,即shellHandler函数放在串口中断里面进行处理

SHELL_TypeDef shell;

void printchar(const char ch)
{
	while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕   
	USART1->TDR = (u8) ch;    
}

//shell.read = NULL;
shell.write = printchar;
shellInit(&shell);

void USART1_IRQHandler(void)
{
	u8 res;	
#if SYSTEM_SUPPORT_OS 		//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntEnter();    
#endif
	if(USART1->ISR&(1<<5))//接收到数据
	{	 
		res=USART1->RDR; 
		shellHandler(&shell, res);
	}
#if SYSTEM_SUPPORT_OS 	//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntExit();  											 
#endif
} 

5、注册自己自定义的相关命令,即可进行相关shell命令的操作(这里采用的串口工具是SecureCRT)

SHELL_EXPORT_CMD_EX(ledt,ledtest, command ledt, ledt [command] --control the led status); 

STM32之基于一款开源嵌入式shell工具移植的学习笔记

至此,移植工作完成,就可以轻松的添加和使用自定义的shell指令进行嵌入式应用的调试了。