* @param flag the flag of mailbox 使用方式 RT_IPC_FLAG_FIFO/RT_IPC_FLAG_RRIO * * @return ...
`rt_forceinline rt_size_t _serial_fifo_calc_data_len(struct rt_serial_fifo *fifo)` 计算 fifo 中写入的数据量 `rt_forceinline void _serial_fifo_push_data(struct rt_serial_fifo *fifo, rt_uint8_t ch)` 压入一个数据(不完整实现,具体见下文) `rt_forceinline rt_uint8_t _serial_fifo_pop_...
串口接收和发送使用的缓存大小是一样的,如果想改变串口缓存大小,请修改 `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;...
①如果Rx FIFO是一个匹配结构并且是free-to-receive,Rx FIFO是匹配胜出者忽略消息邮箱的扫描。 ②另外(Rx FIFO不是一个匹配结构或不是free-to-recive),此时上面描述的匹配胜出者被从消息邮箱中进行搜索。 如果选中的优先级是消息邮箱优先: ①如果一个free-to-receive找到匹配消息邮箱,其匹配胜出者忽略RxFIFO的扫...
当调用这个函数时,系统将先从对象管理器中分配一个 mutex 对象,并初始化这个对象,然后初始化父类 IPC 对象以及与 mutex 相关的部分。互斥量的 flag 标志已经作废,无论用户选择 RT_IPC_FLAG_PRIO 还是 RT_IPC_FLAG_FIFO,内核均按照 RT_IPC_FLAG_PRIO 处理。下表描述了该函数的输入参数与返回值:...
合并BootLoader后移植达克罗德大神的USB驱动, 烧写到SPI启动, USB最多一次性只能接收8字节及以下的长度的数据,超过8字节, 串口助手就卡死了,不能正常发送 ,但是将代码烧写到DRAM上然后从DRAM开始运行就不存在这种问题,不知道是啥原因。 看帖子后面,有解决的说明。是端点的sram fifo 配置缺少了 离线 #...
线程先得到的是最先进入消息队列的消息,即先进先出原则(FIFO)。同时RT- Thread中的消息队列支持优先级,也就是说在所有等待消息的线程中优先级最高的会先获得消息。 用户在处理业务时,消息队列提供了异步处理机制,允许将一个消息放入队列,但并不立即处理它,同时队列还能起到缓冲消息作用。
{caseRT_IPC_FLAG_FIFO://FIFO方式rt_list_insert_before(list, &(thread->tlist));//直接放入队列末尾break;caseRT_IPC_FLAG_PRIO://线程优先级方式{structrt_list_node *n;structrt_thread *sthread;/*find a suitable position*/for(n = list->next; n != list; n = n->next)//遍历信号量的...
这里我们用到了C种的结构体,我们知道结构体存在字节对齐的问题,但我们的数据是单字节对齐的,不存在空位的,因此需要使用如下命令告知编译器不适用默认的字节对齐规则,而是单字节对齐。 第二个问题是对于ARM而言,数据的存储方式是小端模式,但是我们的串口数据在接收后存在FIFO种是大端的模式,因此我们需要进行转换。
另一种情况是,在中断处理过程中需要进行线程切换,这种情况会调用 rt_hw_context_switch_interrupt() 函数进行上下文切换,该函数跟 CPU 架构相关,不同 CPU 架构的实现方式有差异。 在Cortex-M 架构中,rt_hw_context_switch_interrupt() 的函数实现流程如下图所示,它将设置需要切换的线程 rt_interrupt_to_thread...