硬件的生产测试方法及装置的制作方法

文档序号:6130788阅读:226来源:国知局
专利名称:硬件的生产测试方法及装置的制作方法
技术领域
本发明涉及产品测试领域,尤其涉及一种硬件的生产测试方法及测试装置。
背景技术
计算机系统的各种硬件在生产过程中和出厂之前都需要进行测试,以保证产品的质量和性能。在主板的生产测试(Manufacture Test)中,以测试用GPIO(General Purpose 1叩ut/0utput,通用输入输出系统)设置LED (light-emittingdiode,发光二级管)的闪烁是否正常为例,现有技术中通常采用如下方法来进行测试
作业人员选择测试项,由软件自动操作寄存器,让LED闪烁一段时间;作业人员察看LED是否被点亮;
作业人员输入LED是否被点亮的结果报告,如果亮,则通过测试;如果不亮则测试失败。
计算机硬件基本是批量生产,待测试的主板数量极大,测试任务非常繁重。由于绝大多数情况下测试项的结果都是LED被点亮,当作业人员疲劳的时候,很容易忽略实际情况,按照惯性输入测试项的结果报告,即不管LED是否闪烁,都直接输入被点亮的信息。这样很容易让有问题的LED通过测试,导致测试的准确率下降。
台湾公开号码为1229192的专利申请中,公开了一种待测组件测试方法。首先,输出 一具有测试输入信号及预期输出信号的预期测试图样。接着,压縮预期测试图样,并输出预期压縮图样而存储,预期压縮图样具有对应于预期输出信号的预期压縮输出信号。再者,解压縮预期压縮图样,并以测试输入信号对待测组件进行测试。接着,接收待测组件所输出的实际输出信号并压縮,然后输出实际压縮输出信号而存储。最后,依实际压縮输出信号与预期压縮输出信号进行比对测试结果。上述方法也不能在生产测试过程中,避免作业人员因惯性输入错误的测试项结果报告的技术问题。

发明内容
本发明的目的在于提供一种硬件的生产测试方法及装置,能够避免作业人员因惯性输入错误的测试项结果报告,提高了测试的准确性。
为了达到上述目的,本发明公开了一种硬件的生产测试方法包括
随机确定硬件的一种工作状态,指令硬件显示工作状态;该硬件具有至少两种工作状态;
接收输入的硬件实际工作状态;
如果输入的实际工作状态与指令的工作状态相同,则硬件通过测试,否则未通过测试。
本发明实施例中公开的硬件的生产测试方法中,随机确定硬件的一种工作状态进一步包括建立随机数值与硬件工作状态之间的对应关系,产生一个随机数,以其对应的工作状态为指令硬件的工作状态。
本发明实施例中公开的硬件的生产测试方法中,所述方法还包括在接收到输入的硬件实际工作状态后,指令硬件停止显示所述工作状态。优选地,硬件的每种工作状态显示为发光二极管LED以不同的颜色闪烁;输入的硬件实际工作状态具
体为LED所显示的颜色。
本发明还提供了一种硬件的生产测试装置,包括
工作状态单元,用于随机确定硬件的一种工作状态;硬件具有至少两种工作状态;
指令单元,用于向硬件发送工作状态指令,包括指令硬件显示工作状态单元确定的工作状态;
接收单元,用于接收输入的硬件实际工作状态;
判断单元,用于比较输入的实际工作状态与指令的工作状态是否相同,相同
则所述硬件通过测试,否则未通过测试。
本发明实施例中公开的硬件的生产测试装置中,工作状态单元包括
存储模块,用于保存随机数值与硬件工作状态的对应关系;
随机数模块,用于生成随机数,并以所生成随机数的值对应的工作状态为指
令硬件的工作状态。本发明实施例中公开的硬件的生产测试装置中,指令单元向硬件发送的工作 状态指令还包括停止显示工作状态的指令,在接收单元收到输入的实际工作状态后 发送给所述硬件。优选地,硬件的每种工作状态显示为发光二极管LED以不同的颜 色闪烁;输入的硬件实际工作状态具体为LED所显示的颜色。
本发明中指令待测试的硬件随机显示一种工作状态,由作业人员输入硬件所 显示的工作状态,按照指令显示的工作状态与作业人员输入的工作状态是否相同判 定硬件是否通过测试。由于硬件的工作状态随机变化,作业人员需要输入的工作状 态也随机变化,这样可以避免作业人员因长时间测试惯性输入与实际显示不符的工 作状态,提高测试的准确性。


图1为本发明所述硬件的生产测试方法优选实施例的流程图;
图2为本发明所述方法应用示例的程序流程图3为本发明所述硬件的生产测试装置的结构示意图。
具体实施例方式
与现有技术中正常工作的硬件始终向作业人员显示一种固定的工作状态不 同,对具有至少一种工作状态的待测试硬件,本发明中随机指令其显示一种工作状 态,这样作业人员需要按照待测试硬件实际显示的工作状态输入测试结果,而不会 出现惯性输入测试结果的情况。
本发明所述硬件的生产测试方法优选实施方式的流程如图1所示。本发明适 用于具有两种及两种以上工作状态的硬件。
步骤S110:建立待测试硬件的工作状态与随机数值的对应关系。例如,可以 用n个不同的整数来代表硬件的n种工作状态,每个整数对应于一种工作状态;也 可以用n个互不重叠的数值范围分别代表硬件的n中工作状态。
步骤S120:生成一个随机数,该随机数的值对应的工作状态即是要指令待测 试硬件显示的工作状态。
步骤S130:指令硬件显示所生成随机数的值对应的工作状态。
步骤S140:等待作业人员的测试结果输入,直到接收到作业人员输入的待测试硬件显示的实际工作状态。
步骤S150:指令待测试硬件停止显示该工作状态。
步骤S160:判断指令待测试硬件显示的工作状态与作业人员输入的实际显示 工作状态是否相同,如果相同,则待测试硬件通过测试;否则测试失败。
需要说明的是,步骤S150和步骤S160之间并无顺序关系。
另外,本发明中只要能够随机指定待测试硬件显示的工作状态即可,本领域 技术人员知道,除用随机数来实现外也可以采用其他的方式。
仍以主板测试中用GPIO设置LED闪烁是否正常为例来说明上述优选实施例 的具体应用。LED具有三种工作状态,闪烁的颜色分别为红色、绿色和蓝色。在 测试软件中,以随机数值l、 2和3分别代表LED闪烁为红色、绿色和蓝色。测试 软件可以用一个子进程来实现对待测试软件的工作状态控制,此时,测试软件可以 用图2所示的流程实现
父进程产生一个随机数并记录;启动子进程,同时将随机数的值通知子进程; 之后父进程等待作业人员输入的硬件实际显示的工作状态。子进程启动后,先读取 寄存器的数值并记录;之后按照父进程传递的随机数值写寄存器,令LED以与随 机数值对应的颜色闪烁,并保持其一直闪烁。父进程在收到作业人员输入的LED 闪烁颜色后,向子进程发出结束闪烁的信号SIGNT。子进程收到SIGNT信号后, 将寄存器写为原来记录的值,恢复LED测试前的状态,子进程结束。父进程比较 输入的LED颜色与所记录的随机数值是否匹配,来判断硬件是否通过测试。
在采用C语言编程时,上述流程可以采用以下程序实现
父进程部分
int rand—num, led—color; pid一t pid;
srandom((unsigned int)time(0)); rand—num = random()%3+l;
pid = fork();switch (pid) { case -1:
printf("\nfork failed! !\n");
return 1; case 0:
if (rand—num == 2)
printf("LED will now blink with Red! !\n"); else if (rand一num ==1)
printf("LED will now blink with Blue! !\n"); else if (rand_num ==3)
printf("LED will now blink with Green! !\n");
while (1) {
麵nk Leds
if (rand一num == 2)
execl("./setled", "10", "blink", T, 0); else if (rand_num ==1)
execl("./setled", "9", "blink", 'T', 0); else if (rand—num 3)
execl("./setled", "11", "blink", T, 0);
break;default:
printf("Color(blue 1 red 2 green 3):"); scanf("%d", &!ed_color); kill(pid, SIGINT);
if (led_color == rand—num) return 0;
else
return 1;
子进程部分
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <sys/mman.h> #include <string.h> #include <signal.h> #include <unistd.h>
#define DEBUG(args…)printf(args); #define GPIO—BASE 0x70100000 #defme GPIO—RANGE 0x1000 #define GPIO一SWPORTA—DR 0x00 #defme GPIO—SWPORTA—DDR 0x04
9<formula>formula see original document page 10</formula>int fd;
void * virt—addr j
unsigned int gpio一base;
unsigned int prev一led;
fd = open(7dev/mem", O—RDWR);
if(fd==-l) {
〃perror("failed to open /dev/mem\n"); return -1;
virt—addr = mmap(O, GPIO—RANGE, PROT—READ | PROT—WRITE, MAP—SHARED, fd, GPIO—BASE);
if (virt—addr == MAP—FAILED) {
〃perror("faile to map GPIO registers\n");
close(fd》
return -2;
gpio—base = (unsigned int) virt—addr;
//DEBUG("gpio data value %x\n", RED—REG(gpio_base + GPIO—SWPORTA—DR));
//DEBUG("gpio ddr value %x\n", RED—REG(gpio—base + GPIO—SWPORTA—DDR));
SET—GPIO—BIT(gpio—base + GPIO—SWPORTA—DDR, gpio_pin); if (led—value == LED—OFF) {
CLEAR—GPIO一BIT(gpiobase + GPIO—SWPORTA—DR, gpio_pin); } else if (led—value LED—ON) {SET—GPIO—BIT(gpio—base + GPIO—SWPORTA—DR, gpio_pin); } else if (led—value == LED—BLINK) {
prev—led = RED_REG(gpio—base + GPIO—SWPORTA—DR); CLEAR—GPIO—BIT(gpio—base + GPIO一SWPORTA一DR, 9); CLEAR—GPIO—BIT(gpio—base + GPIO一SWPORTA—DR, 10); while (!quit) {
SET—GPIOBIT(gpio—base + GPIO一SWPORTA—DR, gpio_pin); usleep(blink—time);
CLEAR—GPIO—BIT(gpio_base + GPIO SWPORTA一DR, gpio_pin); usleep(blink一time);
WRITE—REG(gpio一base + GPIO—SWPORTA—DR, prev一led);
//DEBUG("gpio data value %x\n", RED_REG(gpio_base GPIO—SWPORTA—DR));
〃DEBUG("gpio ddr value %x\n", RED—REG(gpio—base GPIO—SWPORTA—DDR));
munmap((void *)gpio—base, GPIO_RANGE);
close(fd);
return 0;
create a posix thread int blink—led(void) return 0;void print—usage(void) 〃printf("usage:\n"》
〃printf("setled gpio_pin on|off]blink timeW');
/*
parse arguements
*/
int main(int argc, char *argv[])
/*
get gpio pin get led value
*/
char *end_ptr; long gpio_pin = -1;
enum ledvalue led—value = LED—UNKNOWN;
if (argc < 3) { print—usage(); return 0j
gpio_pin = strtol(argv[O], &end_ptr, 0); 〃DEBUG("gpio pin is %ld\n", gpio_pin);if (end_ptr == argv[O]) {
〃printf("gpio_pin should be a digit\n"); return画lj
if (gpio_pin < 0 II gpio_pin > 15) {
〃printf("gpio_pin should be between 0 and 15\n"); return -2;
if (strcmp(argv[l], "on") == 0) {
led—value = LED_ON; } else if (strcmp(argv[l], "off') == 0) {
led—value = LED—OFF; } else if (strcmp(argv[l], "blink") == 0) { led—value = LED—BLINK; if (argc = 4) {
blink—time = strtoul(argv[2], &end_ptr, 0); if (end_ptr argv[2]) {
〃printf("blink time should be a digit\n"); return -1;
blinkjime *= 100000;
//DEBUG("blink time is %ldms\n", blink—time/1000); } else {
〃printf("unknown led mode\n"); return -3;signal(SIGINT, sig —quit); set_led(gpio_pin, led—value);
return 0;
本发明所述硬件的生产测试装置可以具有图3所示的结构。该装置包括工作 状态单元310、指令单元320、接收单元330和判断单元340。
对具有至少两种工作状态的待测试硬件,工作状态单元310随机确定硬件的 一种工作状态,并将所确定的工作状态通知指令单元320和判断单元340。
指令单元320负责控制待测试硬件的工作状态。在收到工作状态单元310通 知的工作状态后,指令单元320指令待测试硬件显示该工作状态。
接收单元330在收到作业人员输入的硬件的实际工作状态后,将实际工作状 态输出至判断单元340,并将已收到作业人员输入的情况通知指令单元320。
指令单元320在得知作业人员输入待测试硬件的实际工作状态后,指令待测 试硬件停止显示上述工作状态。
判断单元340比较接收单元330输入的实际工作状态与工作状态单元310输 入的指令工作状态是否相同,如果相同则该硬件通过测试;否则该硬件未通过测试。
在采用随机数实现对工作状态的随机指定时,工作状态单元310可以进一步 包括存储模块311和随机数模块312。在存储模块311中保存随机数值与硬件工作 状态的对应关系,由随机数模块312生成随机数,并在存储模块311中查找与所生 成随机数的值对应的工作状态为指令硬件显示的工作状态。
对用GPIO设置LED闪烁是否正常的生产测试,待测试硬件的每种工作状态 显示为LED以不同的颜色闪烁;作业人员输入的硬件实际工作状态为LED所显示 的颜色。
本发明通过随机指定硬件显示的工作状态对其进行测试,使硬件所显示的工 作状态随机变化,作业人员必须根据实际显示的工作状态完成测试,避免了作业人 员惯性输入测试结果,增加了测试的准确性。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本
15发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利 要求保护范围之内。
权利要求
1. 一种硬件的生产测试方法,其特征在于,包括随机确定硬件的一种工作状态,指令所述硬件显示所述工作状态,所述硬件具有至少两种工作状态;接收输入的硬件实际工作状态,以及如果所述硬件实际工作状态与指令显示的所述工作状态相同,则所述硬件通过测试,否则未通过测试。
2. 如权利要求1所述硬件的生产测试方法,其特征在于,所述随机确定硬件的一种工作状态进一步包括-建立随机数值与指令显示的所述工作状态之间的对应关系,以及 产生一个随机数,以其对应的工作状态为该指令显示的所述工作状态。
3. 如权利要求1或2所述硬件的生产测试方法,其特征在于,所述方法还包 括在接收到上述硬件实际工作状态后,指令硬件停止显示所述工作状态。
4. 如权利要求1所述硬件的生产测试方法,其特征在于,所述硬件的每种工 作状态显示为发光二极管LED以不同的颜色闪烁;所述输入的硬件实际工作状态具体为LED所显示的颜色。
5. —种硬件的生产测试装置,所述硬件至少具有两种工作状态,其特征在于,包括工作状态单元,用于随机确定所述硬件的一种工作状态; 指令单元,用于向硬件发送工作状态指令,包括指令该硬件显示上述工作状 态单元确定的工作状态;接收单元,用于接收输入的硬件实际工作状态,以及判断单元,用于比较输入的硬件实际工作状态与指令显示的所述工作状态是 否相同,相同则所述硬件通过测试,否则未通过测试。
6. 如权利要求5所述硬件的生产测试装置,其特征在于,所述工作状态单元包括存储模块,用于保存随机数值与上述硬件工作状态的对应关系,以及 随机数模块,用于生成随机数,并以所生成随机数的值对应的工作状态为指令显示的所述工作状态。
7. 如权利要求5或6所述硬件的生产测试装置,其特征在于,所述指令单元向硬件发送的工作状态指令还包括停止显示工作状态的指令,并在该接收单元收到 输入的硬件实际工作状态后发送给所述硬件。
8. 如权利要求5所述硬件的生产测试装置,其特征在于,所述硬件的每种工 作状态显示为发光二极管LED以不同的颜色闪烁;所述输入的硬件实际工作状态具体为LED所显示的颜色。
全文摘要
本发明公开了一种硬件的生产测试方法,包括随机确定硬件的一种工作状态,指令硬件显示工作状态,该硬件具有至少两种工作状态;接收输入的硬件实际工作状态;如果输入的实际工作状态与指令的工作状态相同,则硬件通过测试,否则未通过测试。本发明还提供了一种实施上述方法的装置。本发明能够使待测试硬件的工作状态随机变化,避免作业人员因长时间测试惯性输入与实际显示不符的工作状态,提高测试的准确性。
文档编号G01R31/317GK101464493SQ20071016016
公开日2009年6月24日 申请日期2007年12月21日 优先权日2007年12月21日
发明者黎 张, 陈志丰 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1