发新帖我要提问
123
返回列表
打印

这个问题,我想了一个春节(是我没表达清楚?)

[复制链接]
楼主: yuntian
手机看帖
扫描二维码
随时随地手机跟帖
41
huangqi412| | 2008-2-21 20:19 | 只看该作者 回帖奖励 |倒序浏览

学习

使用特权

评论回复
42
yuntian|  楼主 | 2008-2-22 09:19 | 只看该作者

TO:41楼老兄

你这个想法是不是欠考虑呀?如果是2005-12-12-31 23:59分,另一个是2006-1-1-0:05分你说要不要比较年呀?还有如果2008-02-28-23:58分呢?

使用特权

评论回复
43
5880527| | 2008-2-22 11:14 | 只看该作者

回LS

你说的前面半截也是不用比较年呀,就月和日,那个2008就不要考虑了,离2008-02-28只有几天了,最多判断一下是不是2012,到2016这软件就已经作古了哈。

使用特权

评论回复
44
zhiwei| | 2008-2-22 12:33 | 只看该作者

很多CPU

内带的RTC都是计秒的,把两个时间转换成秒,然后相减是比较简单的。

使用特权

评论回复
45
icecut| | 2008-2-22 12:51 | 只看该作者

如果这么做门禁,那就白做了

ID自己有时钟,那么说,这个时钟是可以被恶意者任意改的,所以,只要知道上一个人的刷卡时间那么它肯定能成功进入!!!

使用特权

评论回复
46
yuntian|  楼主 | 2008-2-22 17:48 | 只看该作者

to:ls

一点也没白做,因为要两个人同时插才有用,(时间间隔不超过30分钟),门禁存有你的ID号,如果没存,你进不去,

使用特权

评论回复
47
yuntian|  楼主 | 2008-2-22 17:51 | 只看该作者

再则

这个门禁是要求两个一起拿ID去一起开的,哪个没事干拿ID卡去插着玩呀?

使用特权

评论回复
48
forthlab| | 2008-2-22 23:21 | 只看该作者

感觉还是按照基本程序编译结果决定吧

如果优化后,代码量还是超过现在的CPU的ROM,就换个CPU吧。
LZ的思路是对的,再想巧妙的软件办法未必合适,不要再走火入魔,产生BUG。

使用特权

评论回复
49
mikesullen| | 2008-2-25 02:05 | 只看该作者

楼主在36楼贴的程序似乎有一点没太看明白

思路应该没有错,但有一部分感觉没有什么道理。还有我在34楼说的方法应该会比你的方法优化一些,代码量会更小。

没看明白为什么要连加90分,30分就可以了吧?难道两个时间的先后都不确定?
更改如下:
bit time_over_test(void)
{    uchar i;
    char *date_p;
    date_p=&last_time.minute;
    i=30;//i=90;
    do
    {if(date_same_test(&last_time.minute,&date.minute))//比较时间是否相同
            {return(0);}    //时间相同则返回未超时标志
/*
        if(i==60)//过去时间连加30分钟后,指针切换为当前时间,连加60分钟,前30分钟为补时同步
            {date_p=&date.minute;}
*/
        (*date_p)++;    //分钟+=1
        date_compute(date_p);    //重新计算分钟变更后的日历
    }while(--i);
    return(1);
}

使用特权

评论回复
50
yuntian|  楼主 | 2008-2-25 09:02 | 只看该作者

回LS

确实是两个时间先后不确定,如果确定,算法就不是这样了,时间不确定的原因是因为每个ID卡的时间有可能不同步,每个实时时钟有可能为分钟边界上差一分钟或更多,如1分05秒和59分55秒,实际使用时是确实存在的.

使用特权

评论回复
51
yuntian|  楼主 | 2008-2-25 09:06 | 只看该作者

再则

ID卡是的实时时钟是用软件做的,不存在你在34楼所说转换问题,连加90分钟请注意看在加了30分钟后,指针已经切换了,变成加另外一个时间了,这样做是在精简代码.

使用特权

评论回复
52
mikesullen| | 2008-2-25 16:16 | 只看该作者

晕S

果然又被猜中,你的两个时间又不能确定先后,为什么不一次全说清楚。。。
另,我在34楼说的第二点你没看明白?
你从ID取到时间,应该是先保存下来的吧,否则断电后就没了,对吧?
你保存之前,把时间格式通过一个函数转化为单位分钟再保存,这样处理多清晰啊?

使用特权

评论回复
53
yuntian|  楼主 | 2008-2-25 19:19 | 只看该作者

先别晕

时间转换为分钟这不失为一种方法,没试过,我所以没有发言权,但有一个问题,我程序里没有乘法子程序,把时间转换为分钟格式需要3字节以上,也就是说要用到LONG INT,这可能会超出我的程序空间了.
   时间不确定这一点我在第一页都有说明呀!我说明的是任意给定两个时间,包括年月日时分5个参数,当然时间就没有顺序的了,因为在把问题提出来就是要解决两个任意给定的时间是否相差30分钟内,所以也没有必要把其它的条件一一提出,只不过有100字的程序限制而已,对不?

使用特权

评论回复
54
mikesullen| | 2008-2-25 23:09 | 只看该作者

觉得大家都是想帮你

你不应该老让人去猜你的情况,最好说的清楚点。
(1)关于乘法问题,其实就是加法,比如3个小时就是3*24=24+24+24,一个循环就OK了吧。你的程序的实时性应该不需要到ms级,不用写效率那么好的乘法子程序了。
(2)字节问题,你保存年月日这种格式就需要多于3字节,如果转化为分钟存储,并不会对你的程序开支有影响。

另外觉得写一个2K的PIC的8脚单片机,空间紧张了,更应该用汇编来写。

更多人说的更换MCU应该是最好的方法,毕竟空间紧张不是好事,以后每次升级都会遇到问题。对你的项目而言,成本应该不是特别敏感吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则