add bsp log doc
This commit is contained in:
parent
ebb33406bb
commit
33e10fa687
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
# VSCode+Ozone使用方法
|
||||
|
|
@ -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的函数和变量
|
||||
|
||||
|
|
|
@ -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, ...)
|
||||
{
|
||||
|
|
|
@ -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()`发送日志,可以设置小数点位数以降低带宽开销。
|
||||
|
|
|
@ -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的函数和变量
|
||||
|
||||
|
|
Loading…
Reference in New Issue