Allman void
log_record(enum event_code event)
{
        uint32_t type, uptime, utc, i;
        if (cur_write.seqno == 0)
        {
                flash_erase((uintptr_t)SECTOR0);
                if (*SECTOR1 == LOG_MAGIC)
                {
                        flash_erase((uintptr_t)SECTOR1);
                }
                cur_write.sector = SECTOR0;
                cur_write.i = 2;
                cur_write.seqno = 1;
        }
        else
        {
                cur_write.seqno++;
                cur_write.i += REC_TYPE(cur_write.sector[cur_write.i]);
                if (cur_write.i > (MAX_INDEX - 3))
                {
                        cur_write.sector = SEC_SWAP(cur_write.sector);
                        flash_erase((uintptr_t)cur_write.sector);
                        cur_write.i = 2;
                }
        }
        uptime = systime_ms() / 1000;
        utc = clock_get_utc_time();
        if (cur_write.i == 2)
        {
                type = REC_ABS;
        }
        else if ((utc != 0) && (cur_write.utc == 0))
        {
                type = REC_ABS;
        }
        else if (uptime - cur_write.uptime <= 0xFFFF)
        {
                type = REC_REL;
                if (cur_write.utc != 0)
                {
                        int32_t diff[2];
                        diff[0] = (int32_t)uptime - (int32_t)cur_write.uptime;
                        diff[1] = (int32_t)utc - (int32_t)cur_write.utc;
                        if (abs(diff[0] - diff[1]) > 2)
                        {
                                type = REC_ABS;
                        }
                }
        }
        else
        {
                type = REC_ABS;
        }
        if ((type == REC_ABS) && !clock_valid())
        {
                type = REC_NOUTC;
        }
        switch (type)
        {
        case REC_REL:
                i  = type << 24;
                i |= event << 16;
                i |= uptime - cur_write.uptime;
                flash_write32((uintptr_t)&cur_write.sector[cur_write.i], i);
                break;
        case REC_ABS:
                flash_write32((uintptr_t)&cur_write.sector[cur_write.i + 2],
                              utc);
        case REC_NOUTC:
                flash_write32((uintptr_t)&cur_write.sector[cur_write.i + 1],
                              uptime);
                i  = type << 24;
                i |= event << 16;
                i |= REC_PADDING;
                flash_write32((uintptr_t)&cur_write.sector[cur_write.i],i);
                break;
        }
        cur_write.uptime = uptime;
        cur_write.utc = utc;
        if (cur_write.i == 2)
        {
                flash_write32((uintptr_t)&cur_write.sector[1], cur_write.seqno);
                flash_write32((uintptr_t)&cur_write.sector[0], LOG_MAGIC);
        }
}
 
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้
- 
	
- +1 - ASDFS(12.09.2013 14:28)