| 作者 | 主题 |
|---|---|
|
无名 侠士 经验值:1768 发帖数:904 精华帖:11 |
楼主
主题:出道题: 类似FIFO的程序
类似FIFO的程序,正在进行的项目中用到的,看大家有没有更好的办法交流一下
16个任务 1-16 分别代表16个不同的任务号 有16个缓冲区: 整型,存16个任务的任务号, 0代表无任务 一个设置单元: 可以写0-16 的任务号, 设置99时缓冲区任务清零,无任务. 一个完成位: 代表第一个任务完成位,上升沿把缓冲区内的第一个任务去掉. 要求: 1:通过设置单元的数字实时添加设置任务(即进栈),并且进栈时,16个缓冲区的任务号不能重复.先进的排在栈顶. 2:完成位有效时,栈顶出栈, 栈底补0,即常用的"冒泡".
师出无名
|
|
清风飞扬 侠客 经验值:605 发帖数:155 精华帖:2 |
楼
主题:回复:出道题: 类似FIFO的程序
遍历搜索队列代价是很高的,而这个表不需进行遍历搜索。
这个表可以建16行,每一行唯一对应一个事件。比如:第一行存储事件1,第二行存储事件2,以此类推第16行存储事件16。 我们可以事件号作为参数直接寻址到所对应的行,比如:当前事件号是6,就直接查询该表的第6行。这样就可以判断是否向队列添加该事件。 |
|
shine 至圣 经验值:19820 发帖数:8803 精华帖:39 |
楼
主题:回复:出道题: 类似FIFO的程序
其实遍历队列的开销和进队列/出队列的是差不多的,除非使用环形队列。
如果不想遍历队列,可以在建立队列的同时建一个表,和清风飞扬说的一样,一个16行的表,当某事件进队时,该表中对应行置位,出队列时复位。进队之前先检查该位即可。 |