// Returns 64 bit mac timer count value
uint64_t get_timestamp()
{
uint16_t cnt;
cnt = read_counter();
printk ("counter value is 0x%x\n", cnt);
return cnt;
}
来自来电者:
uint64_t ts;
ts = get_timestamp();
printk ( "returned timestamp is 0x%x \n", ts );
我在屏幕上显示以下内容,上面有什么问题?
计数器值为0x000045a5
返回的时间戳为0x00000000
计数器值为0x0000698f
返回的时间戳为0x00000000
答案 0 :(得分:0)
您会看到此问题,因为您错误地打印了值。
printf
类型有专用的uint*_t
格式宏。
来自<inttypes.h>
:
The fprintf() macros for signed integers are:
PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
PRIiN PRIiLEASTN PRIiFASTN PRIiMAX PRIiPTR
The fprintf() macros for unsigned integers are:
PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR
PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR
PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR
PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR
例如,要打印uint16_t
和uint64_t
,您可以编写(未经测试):
int main (void)
{
uint16_t a = 13;
uint64_t b = 37;
printf("uint16_t: %" PRIx16 ", uint64_t: %" PRIx64 "\n", a, b);
return 0;
}
如果您对详细信息感兴趣,以及man stdint.h
和man inttypes.h
类型的语义是什么,则应阅读LEAST
和FAST
。非常酷的东西。