欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LWIP PPP个人学习记录(2) 修改代码结构&加入shell功能

程序员文章站 2024-02-22 18:36:41
...

概述

根据个人习惯,进行源码结构的修改,目的是熟悉lwip ppp基本例程所需要的文件。调整源码命名方式等,有助于理解程序机构。

keil目录结构

LWIP PPP个人学习记录(2) 修改代码结构&加入shell功能

工程源文件目录

LWIP PPP个人学习记录(2) 修改代码结构&加入shell功能

移植开源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 PPP个人学习记录(2) 修改代码结构&加入shell功能

计划

  • 将lwip 2.0.3版本替换为2.1.2
相关标签: lwip lwip ppp