LWIP PPP个人学习记录(2) 修改代码结构&加入shell功能
程序员文章站
2024-02-22 18:36:41
...
概述
根据个人习惯,进行源码结构的修改,目的是熟悉lwip ppp基本例程所需要的文件。调整源码命名方式等,有助于理解程序机构。
keil目录结构
工程源文件目录
移植开源letter shell
letter-shell非常小巧,移植比较简单,只有shell.c/.h、shell_ext.c/.h和shell_cfg.h五个文件。
1. 使能shell默认任务
/**
* @brief 是否使用默认shell任务
* 使能之后可以使用`shellTask()`建立shell任务,或者使用`shellTask()`进行轮询
*/
#define SHELL_USING_TASK 1
2.提供shell所需的串口读写接口
/* shell 对接程序 */
static void shell_port_send(const char _ucByte)
{
comSendChar(COM1,_ucByte);
}
static signed char shell_port_read(char *_pByte)
{
while( comGetChar(COM1, (uint8_t*)_pByte) == 0)
{
osDelay(10);
}
return 0;
}
3. 创建shell任务,并添加测试代码
/* 创建shell任务 */
void create_shell_task(void)
{
shell.read = shell_port_read;
shell.write = shell_port_send;
shellInit(&shell);
osThreadDef(shellTask, shellTask, osPriorityNormal, 0, 1024);
shellTaskHandle = osThreadCreate(osThread(shellTask), &shell);
}
/* 打印RTOS任务列表 */
static void cmd_list_tasks(int argc, char *argv[])
{
char pcWriteBuffer[512];
printf("任务名 任务状态 优先级 剩余栈 任务序号\r\n");
vTaskList((char *)&pcWriteBuffer);
printf("%s\r\n", pcWriteBuffer);
}
SHELL_EXPORT_CMD(ps, cmd_list_tasks, list tasks);
/* TCP发送数据 */
static void cmd_tcp_send(int argc, char *argv[])
{
if(argc > 1)
tcp_write(pcb, argv[1], strlen(argv[1]), 0);
}
SHELL_EXPORT_CMD(send, cmd_tcp_send, tcp send test);
成果
计划
- 将lwip 2.0.3版本替换为2.1.2