示例#1
0
//--------------------------------------------------------------------------------------------------
uint8_t snprint_d8(char *buffer, size_t buf_size, uint8_t num){
    uint8_t i, nchars;
    char str[3];
    uint16_t bcd;
    
    i = 3; // max of 3 digits
    
    bcd = u8_to_bcd(num);
    
    do{
        i -=1;
        str[i]=(bcd & 0x0F) + '0';
        bcd >>= 4;
    }while(bcd != 0);
    
    nchars = 3-i;
    
    if(buf_size == 0) return(nchars);
    
    do{
        *buffer = str[i];
        i++;
        buffer++;
        if((3-i) == buf_size) return(nchars);
    }while(i<3);
    
    *buffer = 0;
    return(nchars);
}
/* Get the current time (p.8) */
static m_uint64_t get_current_time(cpu_gen_t *cpu)
{
   m_uint64_t res;
   struct tm *tmx;
   time_t ct;
   
   time(&ct);
   tmx = localtime(&ct);
   
   res =  u8_to_bcd(tmx->tm_sec)  << 8;
   res += u8_to_bcd(tmx->tm_min)  << 16;
   res += u8_to_bcd(tmx->tm_hour) << 24;
   res += ((m_uint64_t)(u8_to_bcd(tmx->tm_wday))) << 32;
   res += ((m_uint64_t)(u8_to_bcd(tmx->tm_mday))) << 40;
   res += ((m_uint64_t)(u8_to_bcd(tmx->tm_mon+1))) << 48;
   res += ((m_uint64_t)(u8_to_bcd(tmx->tm_year))) << 56;

   return(res);
}