uart_obj类型是struct stm32_uart —— struct rt_serial_device serial —— const struct rt_uart_ops *ops; 这样就联系起来了。 structstm32_uart{UART_HandleTypeDefhandle;structstm32_uart_config*config;#ifdef RT_SERIAL_USING_DMAstruct{DMA_HandleTypeDefhandle;rt_size_tlast_index;}dma_rx;struct{DMA...
RT-Thread源代码目录结构如下图所示: 目前RT-Thread已经针对将近90种开发板做好了移植,大部分 BSP 都支持 MDK﹑IAR开发环境和GCC编译器,并且已经提供了默认的 MDK 和 IAR 工程,用户可以直接基于这个工程添加自己的应用代码。 每个 BSP 的目录结构高度统一,且都提供一个 README.md 文件,包含了对这个 BSP 的基本...
RISC-V RV32E/RV32I[F]/RV64[D]:manufacturers like sifive、Canaan Kendryte、bouffalo_lab、Nuclei、T-Head、HPMicro ARC:manufacturers like SYNOPSYS DSP:manufacturers like TI C-Sky x86 The main IDE/compilers supported by RT-Thread are:
constchar*name,rt_uint32_tflag,void*data){rt_err_tret;structrt_device*device;RT_ASSERT(serial!=RT_NULL);device=&(serial->parent);device->type=RT_Device_Class_Char;device->rx_indicate=RT_NULL;device->tx_complete=RT_NULL;#ifdef RT_USING_DEVICE_OPS...
因此,serialX 需要进行一些改动: `_serial_int_tx` 函数 // TODO: start tx #if defined (RT_SERIAL_NO_TXEIT) if (serial->ops->is_int_txing != RT_NULL && serial->ops->is_int_txing(serial) == RT_FALSE) { ch = _serial_fifo_pop_data(tx_fifo); ...
rt_bool_t is_full; }; 重新定义 `rt_serial_device` 定义: 登录后复制struct rt_serial_device { struct rt_device parent; const struct rt_uart_ops *ops; struct serial_configure config; void *serial_rx; // 串口接收缓存 void *serial_tx; // 串口发送缓存 ...
rt-thread 驱动篇(三) serialX 压力测试 前言 本周笔者花了好多天的时间,计划从多个方面对串口驱动做个比较。下面就从以下几个角度做个对比测试。 1. 工作模式对照 2. close open 测试 3. poll 发送测试 4. flush 支持测试 5. 非阻塞收发测试 6. 阻塞收发测试...
目前手头没有开发版,所以先试用模拟器熟悉下:Keil模拟器STM32F103 (rt-thread.org)。 按照文档二话不说先把例程跑起来: 1.$Super$$和$Sub$$ 在keil 的ARM Development Tools中找到对应的介绍: 告诉了我们这个用法: 1.$Super$$foo:标识原始函数foo,使用它直接调用原始函数foo。
serialX.c 添加 `flush` 回调函数实现 `static rt_err_t rt_serial_flush(struct rt_device *dev)` ,用于等待串口驱动层发送缓存发完数据。另外底层外设也增加 flush 接口,用于等待串口发送寄存器中的*最后一个字节数据*被搬到了移位发送寄存器中。
串口接收和发送使用的缓存大小是一样的,如果想改变串口缓存大小,请修改RT_SERIAL_FIFO_BUFSZ的值。 如果想改变 DMA 二级缓存大小,请修改RT_SERIAL_DMA_BUFSZ的值。 定义一个收发通用 fifo: struct rt_serial_fifo { rt_uint32_t buf_sz; /* software fifo */ rt_uint8_t *buffer; rt_uint16_t put_in...