add bsp log doc

This commit is contained in:
NeoZng 2022-11-11 21:49:03 +08:00
parent ebb33406bb
commit 33e10fa687
6 changed files with 64 additions and 8 deletions

View File

@ -45,6 +45,9 @@
"stdint-gcc.h": "c",
"string.h": "c",
"motor_def.h": "c",
"stdio.h": "c"
"stdio.h": "c",
"segger_rtt_conf.h": "c",
"segger_rtt.h": "c",
"bsp_log.h": "c"
}
}

View File

@ -0,0 +1,2 @@
# VSCode+Ozone使用方法

View File

@ -7,11 +7,19 @@
> 1. 增加数据帧的长度定义使得收发更加灵活而不是固定的8 bytes
> 2. 增加自动检测ID冲突的log输出。
## 使用说明
若你希望新增一个基于CAN的module首先在该模块下应该有一个包含`can_instance`指针的module结构体或当功能简单的时候可以是单独存在的`can_instance`,但不推荐这样做)。
## 代码结构
.h文件内包括了外部接口和类型定义,以及模块对应的宏。c文件内为私有函数和外部接口的定义。
### 类型定义
## 类型定义
```c
@ -55,7 +63,7 @@ typedef void (*can_callback)(can_instance*);
- 每个使用CAN外设的module都需要在其内部定义一个`can_instance`。
### 外部接口
## 外部接口
```c
void CANRegister(can_instance* instance, can_instance_config config);
@ -73,7 +81,7 @@ can_instance_config config={.can_handle=&hcan1,
`CANTransmit()`是通过模块通过其拥有的CAN实例发送数据的接口调用时传入对应的instance。在发送之前应当给instance内的`send_buff`赋值。
### 私有函数和变量
## 私有函数和变量
在.c文件内设为static的函数和变量

View File

@ -6,7 +6,10 @@
#define BUFFER_INDEX 0
void BSP_Log_Init() { SEGGER_RTT_Init(); }
void BSP_Log_Init()
{
SEGGER_RTT_Init();
}
int printf_log(const char *fmt, ...)
{

View File

@ -2,4 +2,34 @@
<p align='right'>neozng1@hnu.edu.cn</p>
> TODO:
>
> 1. 在未接入调试器的时候将日志写入flash中并提供接口读取
> 2. 增加日志分级提供info、warning、error三个等级的日志
## 使用说明
bsp_log是基于segger RTT实现的日志打印模块。
```c
int printf_log(const char *fmt, ...);
void Float2Str(char *str, float va);
```
调用第一个函数可以通过jlink或dap-link向调试器连接的上位机发送信息格式和printf相同示例如下
```c
printf_log("Hello World!\n");
printf_log("Motor %d met some problem, error code %d!\n",3,1);
```
第二个函数可以将浮点类型转换成字符串以方便发送:
```c
float current_feedback=114.514;
char* str_buff[64];
Float2Str(str_buff,current_feedback);
printf_log("Motor %d met some problem, error code %d!\n",3,1);
```
或直接通过`%f`格式符直接使用`printf_log()`发送日志,可以设置小数点位数以降低带宽开销。

View File

@ -4,11 +4,21 @@
> TODO:为初始化定义一个结构体`usart_init_config`用于保存初始化所需的参数从而避免单独赋值,使得整体风格统一。
## 使用说明
若你需要构建新的基于串口的module首先需要拥有一个`usart_instance`的指针用于操作串口对象。
需要在串口实例下设定接收的数据包的长度,实例对应的串口硬件(通过`UART_HandleTypeDef`指定,如`&huart1`),解析接收数据对应的回调函数这三个参数。然后,调用`USARTRegister()`并传入配置好的`usart_instance`指针即可。
若要发送数据,调用`USARTSend()`。注意buffsize务必小于buff的大小否则造成指针越界后果未知。
串口硬件收到数据时,会将其存入`usart_instance.recv_buff[]`中,当收到完整一包数据,会调用设定的回调函数`module_callback`(即你提供的解析函数)。在此函数中,你可以通过`usart_instance.recv_buff[]`访问串口收到的数据。
## 代码结构
.h文件内包括了外部接口和类型定义,以及模块对应的宏。c文件内为私有函数和外部接口的定义。
### 类型定义
## 类型定义
```c
#define DEVICE_USART_CNT 3 // C板至多分配3个串口
@ -35,7 +45,7 @@ typedef struct
- 每定义一个`usart_instance`,就代表一个串口的**实例**对象。一个串口实例内有接收buffer单个数据包的大小该串口对应的`HAL handle`(代表其使用的串口硬件具体是哪一个)以及用于解包数据的回调函数。
### 外部接口
## 外部接口
```c
void USARTRegister(usart_instance *_instance);
@ -48,7 +58,7 @@ void USARTSend(usart_instance *_instance, uint8_t *send_buf, uint16_t send_size)
- `USARTSend()`是通过模块通过其拥有的串口对象发送数据的接口调用时传入的参数为串口实例指针发送缓存以及此次要发送的数据长度8-bit\*n)。
### 私有函数和变量
## 私有函数和变量
在.c文件内设为static的函数和变量