OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3223|回复: 10

分享一个自制的软件FIFO管理库

[复制链接]

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-5-24
在线时间
14 小时
发表于 2018-11-28 10:16:34 | 显示全部楼层 |阅读模式
    分享一个自制的软件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) 等等...

    同时安利一下其他的自制库
123.png
    如果大家觉得不错的话, 以后都会慢慢发布出来.



std_fifo_V1.2.5.rar (1.51 MB, 下载次数: 83)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-9-19
在线时间
7 小时
发表于 2018-11-28 10:25:16 | 显示全部楼层
谢谢楼主,哈哈  再一次感谢
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-9-19
在线时间
7 小时
发表于 2018-11-28 10:28:06 | 显示全部楼层
楼主工程文件有吗
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-5-24
在线时间
14 小时
 楼主| 发表于 2018-11-28 10:36:04 | 显示全部楼层
Britripe 发表于 2018-11-28 10:28
楼主工程文件有吗

2.png     你是说工程模版吗? 工程模版的话也会在后续发布, 基于FreeRTOS, 并在此基础上包装了许多系统级API和功能库.
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-28 11:17:17 | 显示全部楼层
你很厉害
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2018-11-28 13:58:30 | 显示全部楼层
裸机程序可以使用下,如果操作系统的话还需要增加阻塞机制
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

4

主题

133

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3863
金钱
3863
注册时间
2016-6-11
在线时间
710 小时
发表于 2018-11-28 14:28:44 | 显示全部楼层
谢谢分享!!!
回复 支持 反对

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-11-28 14:37:32 | 显示全部楼层
在RTOS底下, 已经有提供类似的功能了, 可能比较没有用.
若是在没有用OS的情况下, 用在中断里面, 可能还不错.

看了之后, 有一些疑问和建议:
1. config文件里面有一些设置似乎可以调整, 是否可多加一些说明.
2. ATOMIC(Lock)机制, 是否可以参考 http://infocenter.arm.com/help/i ... 0321a/BIHEJCHB.html 带入ARM的Cortex M建议作法, 感觉可能比较通用且稳定些.
3. ConfigHandler.fifo = (void *)(TestMemory + FIFO_BORDER_ITEM_LENGTH); 那个fifo, 看起来在配置的时候有多分配, 是否可以说明实际在用的时候, 我们要给它多少byte的buffer?
回复 支持 反对

使用道具 举报

0

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2017-7-17
在线时间
166 小时
发表于 2018-11-28 14:46:26 | 显示全部楼层
谢谢分享!!!
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-5-24
在线时间
14 小时
 楼主| 发表于 2018-11-28 16:18:32 | 显示全部楼层
xsx127 发表于 2018-11-28 13:58
裸机程序可以使用下,如果操作系统的话还需要增加阻塞机制

3.png
绝对的阻塞机制需要提供进出原子态的接口给这两个宏

或者 #define FIFO_PORT_ATOMIC_SWITCH     FIFO_SWITCH_DISABLE 使用纯软件的阻塞机制, 只不过不安全
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-5-24
在线时间
14 小时
 楼主| 发表于 2018-11-28 16:33:08 | 显示全部楼层
sammy902583 发表于 2018-11-28 14:37
在RTOS底下, 已经有提供类似的功能了, 可能比较没有用.
若是在没有用OS的情况下, 用在中断里面, 可能还不 ...

1. 配置部分会在后面继续优化, 希望有优化的建议.
2. 您给我的ATOMIC(Lock)机制参考例程, 我看了下, 是无限等待的机制, 容易使多个进程都卡死, 而本库提供了上锁失败的反馈, 由用户来选择继续等待还是去干其他事情.
3. 您说的应该是 void FIFO_TestFunction(void)/* FIFO功能测试函数 */ 中的配置参数,
  ConfigHandler.fifo = (void *)(TestMemory + FIFO_BORDER_ITEM_LENGTH); 是做在做越界检测, 因为在大部分微机调试中, 内存越界是难以直观体现出来的, 所以在工作内存段两边做了安全内存区, 用来检测是否越界. 实际使用中是不会这个干的. 让您误解了.
   详细使用说明会在后续补充.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 02:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表