发博文
个人资料
showpa
showpa
  • 博客等级:
  • 博客积分:101
  • 博客访问:1,890
  • 关注人气:0
评论
加载中…
留言
加载中…
图片播放器
访客
加载中…
好友
加载中…
博文
(2007-12-03 13:45)
      对指纹识别算法进行测试的过程中,发现效率很差,对算法进行分析并对指纹识别的过程进行了裁减,效果还是不理想,而且是以牺牲精度,增多指纹特征点和增大指纹模板为代价,划不来,只有从指纹算法本身考虑优化。测试发现大量的时间花费在sin、cos、atan等上,这些函数是直接调用c库中math函数库,而PowerPC405EZ开发板不支持浮点运算,所以估计这些函数都没有经过优化,导致效率很差,我们考虑用定点算术来实现这些函数。

      看了网上一篇老外写的文章《Do It Fast》,对定点数和定点算法有了个初步的理解。以前对定点数的概念很模糊,都是停留在理论上,没有任何实际的意义,现在想想其实就是用定点表示的小数,其整数部分和小数部分的位数是固定的。

      用定点算术来实现这些函数首先考虑定义合适的定点数类型。其实考虑定点类型的时候可以跟整型int类比,整型只是没有小数部分,或者说小数部分的位数为0,定点数的话可以在整型数的基础上,根据需要的精度和数的范围来定义合适的整数部分和小数部分的位数,如32位整型数可以分16位作为定
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-11-25 15:20)
    匆匆忙忙赶完了决赛提交的文档,时间又不知不觉地接近了晚上11点。11点是实验室熄灯的时间,不知道已经过去的n个11点有多少次是带着问题,意犹未尽地离开实验室;有多少次是想到了一个思路,一路小跑地奔回寝室继续摸索;有多少次是完成了预期目标,心满意足、意气风发地和团队成员海聊山侃,结伴而归;有多少次是理清了思路,踌躇满志地期盼着第二天白天尽快到来……今天的11点似乎有点特别,忙完了手头的一切,没有太多的兴奋反而有一丝解脱涌上心头。也许真的是累了。

 

    实验室的人都走光了,把音响开到最大,《He’s a pirate》厚重的旋律像一把战锤擂起了胸中的热血,唤醒了意识里的激情。手里默默收拾着,开发板、RFID读写模块、指纹模块、打印的参考资料,一一从手里经过,被放到合适的位置。这件闪烁着智慧的灵光,那件回响着郁闷的叹息,这个见证了意外的惊喜,那个留下暂时的遗憾……

 

    记得清清楚楚,7月14日,刚刚经历了大四最后的生离死别,享受家的温暖不到两个星期,又从千里之外赶回

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
     在系统整合的时候,指纹模板信息要通过rfid读写模块存储到智能卡里。指纹模块信息估算有几百byte,S50卡存储容量为1k byte,在写入的时候要注意第一扇区的第一个block为卡序列号,无法修改,每个扇区的第四个block存储密钥和读写访问控制变量也不能随便修改,因此,可以使用的存储空间很有限。
 
    考虑的解决思路如下:
    先计算所需的block数目,计算为i,i=datasize/blocksize。再按照如下规则选择可以写入的block:第0扇区的第一和第四block不写,其他扇区的第四个blcok不写。用变量k来表示当前可以写入的block,当k==0或(k%4)==3时k++,即选择下一个block。写之前先对选择的block所在的扇区(k/4)进行认证,认证完毕后再写入相应的block。但程序实际运行的时候出现要么认证错误要么写入错误,无法完成数据的写入操作。
 
    代码如下:
   
#include 'tx500b.h'

uchar Card_Snr[8]; //
uchar Key_a[6]    = {0x55, 0x55,
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-11-20 09:33)
    昨天把获取指纹信息的程序基本上开发完毕,调试的时候发现还是只能获取部分指纹,仅仅是第一帧的数据,查看代码发现是主程序里面只调用了一次收链路层的数据帧函数,而没有在主机发送响应后继续读链路层的数据帧。由于实验室快熄灯了,匆匆回寝。早上过来,修改了代码,调试成功,指纹数据采集成功。
 
    代码主要做的工作是:
    1、主机向指纹模块发送Grab命令,编写的函数为SendGrabCommand
    主机接受指纹模块返回的链路层数据帧,由于采用usb接口,每次只能收64字节,而指纹模块返回的链路层数据帧最大数据长度可达2047字节,因此编了一个函数,循环从usb端点(EP)读数据,将读到的数据缓存到字符数组LLBuffer中,接受链路层数据帧的函数为ReadDataToLLBuffer,此buffer即为链路层的数据帧缓冲。
    3、主机解析LLBuffer内容,判断帧类型。由于指纹数据比较大,一个链路层数据帧最大数据容量为2047byte,所以指纹数据需要通过多个链路层的数据帧来传输。编写了一个ParseLLBuffer函数,来
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
    这两天通过尝试交叉编译libusb、thinkfinger等源码包,经过一系列尝试、摸索都已成功将这些包交叉编译,安装到ppc_4xx的根文件系统下并运行相应的测试程序成功。在此将交叉编译过程中自己掌握的一些步骤整理下来,以供参考。
 
     1、首先配置环境变量。环境变量主要是为了下面的步骤做准备,如PATH等环境变量。将安装交叉编译器的bin目录添加到PATH环境变量,如export PATH=/opt/eldk/usr/bin:$PATH
 
     2、进入源码包根目录下,运行./configure。configure命令有很多参数可配置,可以用./configure --help来查看,在交叉编译过程中可设置--host,--target,--build这几个参数,如--host=ppc-linux,--build=i686-pc-linux-gnu,--target=ppc-linux。我的个人理解是--host表示主机上安装的交叉编译器对应目标板的架构和所运行操作系统,--target表示目标板的架构和所运行操作系统,--build表示主机的架构及操作系统类型。这些参数配置后,configure时会读取源码目录下面的config.sub文件,查找、检查设置的参数是否支持,如ppc架构是否
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2007-11-10 22:58)
     经历了一天在linux环境下面的折腾:从网上down下bioapi1.2.2,首先尝试交叉编译,configure经历多次失败,通过查看config.log,做相应的调整,解决了前面几个交叉编译器相关的问题,最后出现稀奇古怪的linking文件错误,找遍整个目录都没找到这个文件,交叉编译失败,没辙了。 

      没办法,一步登天不行,就老老实实地用主机环境的gcc编译,configure、make、make install一切都顺,成功,接着从upek网上down下upeck的TFM/ESS的bsp(biometrical service paceket)的linux版本,只是一个库,直接运行install脚本,成功,这些安装工作完成后,把导师帮忙做好的指纹模块接电,运行测试程序。测试程序是用qt开发的,选择相应的upek dsp,运行指纹注册,再验证,非常成功,我和小熊高兴了好一阵子。事情似乎进行得很顺,下一步似乎就是准备寻找upek dsp的参考源码和解决bioapi的交叉编译问题。 

      插点东西:(bioapi和upek bsp的关系:upek bsp是指纹模块底层驱动,我估计在usb驱动的基础上,实现了TFM
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

IT/科技

ibm

power

iic

/*------------------------------------------------------------------------------------------
[文件名] I2C.c
===========================================================================================*/</P><P>#include 'reg51.h'
#include 'intrins.h'
unsigned char SystemError;
sbit SCL= P1^6; //定义串行时钟线所在口 使用时根据自己的需要来定义
sbit SDA= P1^7; //定义串行数据线所在口 使用时根据自己的需要来定义
#define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();}
/*--------------------------------------------------------------------------------
调用方式:void AD7416_I2CStart(void) 2003/05/04
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
SDA=0; SomeNOP();
SCL=0;
}
/*------------------
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

IT/科技

linux

i2c

 摘要: 本文分析了Linux系统中I2C驱动程序的结构,并以AT91RM9200和X1227为例,介绍了如何在嵌入式Linux系统中实现I2C总线适配器及I2C设备驱动。
关键词: Linux;I2C总线;I2C设备;驱动

引言

    I2C总线是PHILIPS公司推出的两线式串行总线,用于连接微控制器及其外围设备,具有简单、高效等特点。由于其接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片引脚的数量,降低了互联成本,特别适用于嵌入式产品。

    而Linux系统具有开源、免费、网上资源丰富等优点,目前已成为嵌入式系统的主流选择。因此如何在嵌入式Linux系统中实现I2C功能成为实际开发中的问题。

I2C总线

    I2C 总线通过串行数据SDA 和串行时钟SCL线在连接到总线的器件间传递信息,每个器件都有一个唯一的地址识别。根据数据传输时的功能不同,把器件分为主机和从机。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,通常是微控制器。此时,任何被寻址的器件都被认为是从机,例如LCD驱动器、E2PRO
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

IT/科技

ibm

power

linux

这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容:

 

源程序编译

Makefile的编写

程序库的链接

程序的调试

头文件和系统求助

 

1.源程序的编译

 

在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器.

 

假设我们有下面一个非常简单的源程序(hello.c):

 

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

IT/科技

ibm

power

UART是通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
而RS232、RS499、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的数据链路层(上一层)的概念。
COM口是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。所以,现在PC机的COM口均为RS232。若配有多个异步串行通信口,则分别称为COM1、COM2... 。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有