Files
2026-03-31 15:40:09 +08:00

122 lines
1.9 KiB
C

/**
* @file shell_port.c
* @author Letter (NevermindZZT@gmail.com)
* @brief
* @version 0.1
* @date 2019-02-22
*
* @copyright (c) 2019 Letter
*
*/
#include "FreeRTOS.h"
#include "task.h"
#include "shell.h"
#include "queue.h"
#include "semphr.h"
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "string.h"
Shell shell;
char shellBuffer[512];
static SemaphoreHandle_t shellMutex;
/**
* @brief 用户shell写
*
* @param data 数据
* @param len 数据长度
*
* @return short 实际写入的数据长度
*/
short userShellWrite(char *data, unsigned short len)
{
Usart_SendString(USART1,data);
return len;
}
/**
* @brief 用户shell读
*
* @param data 数据
* @param len 数据长度
*
* @return short 实际读取到
*/
/* 自定义接口函数 */
extern uint8_t g_debugRxBuf[];
extern uint8_t g_debugRxFlag;
extern uint16_t g_debugRxLen;
void userShellRun(void)
{
if(g_debugRxFlag)
{
for(uint8_t i=0;i<=g_debugRxLen;i++)
{
shellHandler(&shell,g_debugRxBuf[i]);
}
g_debugRxLen = 0;
g_debugRxFlag = 0;
memset(g_debugRxBuf,0x00,255);
}
}
short userShellRead(char *data, unsigned short len)
{
userShellRun();
vTaskDelay(20);
return 0;
}
/**
* @brief 用户shell上锁
*
* @param shell shell
*
* @return int 0
*/
int userShellLock(Shell *shell)
{
xSemaphoreTake(shellMutex, portMAX_DELAY);
return 0;
}
/**
* @brief 用户shell解锁
*
* @param shell shell
*
* @return int 0
*/
int userShellUnlock(Shell *shell)
{
xSemaphoreGive(shellMutex);
return 0;
}
/**
* @brief 用户shell初始化
*
*/
void userShellInit(void)
{
shellMutex = xSemaphoreCreateMutex();
shell.write = userShellWrite;
shell.read = userShellRead;
shell.lock = userShellLock;
shell.unlock = userShellUnlock;
shellInit(&shell, shellBuffer, 512);
if (xTaskCreate(shellTask, "shell", 256, &shell, 5, NULL) != pdPASS)
{
printf("shell task creat failed");
}
}