分享一个自制的软件FIFO管理库, 此库已在应用很多大型工程项目上, 上手快速, 操作简单, 只有4个简单的函数:
FIFO_Status FIFO_Create(FIFO_Handle *Handler, const FIFO_ConfigHandle *ConfigHandler) ;/* 创建FIFO */
FIFO_Status FIFO_Delete(FIFO_Handle *Handler); /* 删除FIFO */
FIFO_Status FIFO_Write(FIFO_Handle *Handler, const void *import); /* 写入FIFO */
FIFO_Status FIFO_Read(FIFO_Handle *Handler, void *export); /* 读取FIFO */
此FIFO管理库功能类似于操作系统的队列, 但是本库为独立库, 兼容任何环境, 移植简单, 且注释详细, 更利于学习.
此FIFO管理库支持使用动态内存创建, 支持多任务操作.
详细使用说明请参考附件内的文档 <std_fifo原理说明.pdf> 和 <std_fifo使用教程.pdf>.
软件FIFO适用场景有:
(1) 突发高速数据缓冲区.
(2) 任务之间的信号量.
(3) 等等...
同时安利一下其他的自制库
如果大家觉得不错的话, 以后都会慢慢发布出来.
std_fifo_V1.2.5.rar
(1.51 MB, 下载次数: 67)
2018-11-28 09:42 上传
点击文件名下载附件
绝对的阻塞机制需要提供进出原子态的接口给这两个宏
或者 #define FIFO_PORT_ATOMIC_SWITCH FIFO_SWITCH_DISABLE 使用纯软件的阻塞机制, 只不过不安全
1. 配置部分会在后面继续优化, 希望有优化的建议.
2. 您给我的ATOMIC(Lock)机制参考例程, 我看了下, 是无限等待的机制, 容易使多个进程都卡死, 而本库提供了上锁失败的反馈, 由用户来选择继续等待还是去干其他事情.
3. 您说的应该是 void FIFO_TestFunction(void)/* FIFO功能测试函数 */ 中的配置参数,
ConfigHandler.fifo = (void *)(TestMemory + FIFO_BORDER_ITEM_LENGTH); 是做在做越界检测, 因为在大部分微机调试中, 内存越界是难以直观体现出来的, 所以在工作内存段两边做了安全内存区, 用来检测是否越界. 实际使用中是不会这个干的. 让您误解了.
详细使用说明会在后续补充.
一周热门 更多>