明华rf 射频寻卡性能问题

大自然的搬運工 2019-06-09 01:55:06
目的:一直循环等待读取卡片。

但是效率相当低,而且CPU占用高。我见别人写的程序CPU占用非常低,发片放到读卡器立即就能检测到,请问是不是有另一个接口可以调用,非常感谢大家解答疑惑。。

下面是我的代码:
st = RF.rf_card(icdev, 0, snr);    //寻卡
int i = 0;
while (st != 0)
{
i++;
st = RF.rf_card(icdev, 0, snr);
Console.Write(">");
Delay(1000);

}
...全文
243 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
感谢“wanghui0380”回复,这个问题困扰我很久。CPU虽然不至于占满100%,一直保持25%,四线程CPU。rf_card 寻卡一次很快就返回失败,所以才延迟1000毫秒。 感谢“蜗牛慢慢趴”提醒,我之前是固定检测5次就退出的,又删除了“st != 0 && i <5,忘了删除这个变量。
jx315425246 2019-06-11
  • 打赏
  • 举报
回复
里面有IO操作,并且没有封闭,把IO操作封闭到读卡线程,并且锁
wanghui0380 2019-06-11
  • 打赏
  • 举报
回复
我们可以试试看rf_card一次,然后不放卡上去,看他执行结果。看他是一直等在那里,还是立刻返回,还是过一段时间超时返回。 能确定这个了,我们就知道后面怎么处理了
wanghui0380 2019-06-11
  • 打赏
  • 举报
回复
我专门下了个一个明华的api文档来看,从文档来说,明华并没有提供主动通知(回调函数)这类方法。 那么我只能认为,他的确就是如你写的,是定时请求方式完成。(文档也明确说明,寻卡函数是rf_card是3个低级函数,请求寻卡request,_anticoll防止多张冲突,select锁定一张3个低级函数构成,这说明他本身就是让你不停去请求的) 我姑且认为rf_card是个同步阻塞方法,他超时或者其他异常返回0,正常非0 那么我们也只能不停访问他。当然 Delay(1000);我们不知道你怎么写的,正常来说1秒钟一次,还不至于让cpu给占满
秋的红果实 2019-06-11
  • 打赏
  • 举报
回复
这个主要决定于硬件性能 程序也看不出问题,为什么要延迟?读取信息本身就需要花费时间的
蜗牛慢慢趴 2019-06-11
  • 打赏
  • 举报
回复
当心i超界
  • 打赏
  • 举报
回复
怎么检测卡片进入读写器的操作范围
  • 打赏
  • 举报
回复
引用 10 楼 qq2501 的回复:
感谢“wanghui0380”回复,这个问题困扰我很久。CPU虽然不至于占满100%,一直保持25%,四线程CPU。rf_card 寻卡一次很快就返回失败,所以才延迟1000毫秒。 感谢“蜗牛慢慢趴”提醒,我之前是固定检测5次就退出的,又删除了“st != 0 && i <5,忘了删除这个变量。
用了定时器 为什么还要用 while啊。 如果一秒读一次, 读到后 停止定时器, 处理完事物在使用定时器
wanghui0380 2019-06-10
  • 打赏
  • 举报
回复
rf 读卡器,一般读卡器分一次读和多次读方法,你这个是一次读方法。 你这程序也没办法改,顶多的建议就是别写到主线程里,然后适当休眠,同时请带退出。读卡器这玩意其实是个并不是100%稳定的东西,大多数无源读卡器读写成功率在98%左右,所以你别认为他就一定能读出东西
zijiang001 2019-06-10
  • 打赏
  • 举报
回复
检查下是否有死循环
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
rf 读卡器,一般读卡器分一次读和多次读方法,你这个是一次读方法。 你这程序也没办法改,顶多的建议就是别写到主线程里,然后适当休眠,同时请带退出。读卡器这玩意其实是个并不是100%稳定的东西,大多数无源读卡器读写成功率在98%左右,所以你别认为他就一定能读出东西
我使用后台读取卡片,虽然不卡界面,但是cpu占用一点不少啊。我的想法是尽量低功耗、反应快的等待读取卡片。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧