Tag: logging

嵌入式应用程序的高性能日志库

我正在寻找一个我将在嵌入式设备上使用的高性能日志库。 我还想说我之前使用的是PaulBunyan日志库,它提供了一种有效的信息传输方法。 [通过高效我的意思是它有一个解决方案,用于通过低速接口(例如SERIAL)发送数据时仅传输__LINE__和__FILE__ – 当然先前通过扫描代码进行__LINE__ __FILE__映射]。 你知道这样的解决方案还是至少类似的解决方案? 提前感谢任何指针/类似解决方案, 尤利安

在printf参数中提升类型是危险的吗?

我的问题源于在尝试构建多个位深度平台(例如32/64)时尝试使用printf来记录事物。 一直在养成丑陋头脑的问题是尝试在多种体系结构上打印。 在32位上它会是这样的 printf(” my int: %d\n”, myInt); 但在64位上,它必须改为 print (” my int: %ld\n”, (long)myInt); 我有两个相关的问题: 我的第一个想法是,当你告诉printf打印一个变量,给它一个格式时,它会查看该变量的地址并获取该格式所需的字节数。 这一开始似乎是个大问题。 例如,如果你有一个变量myChar,它是一个char(1个字节),但是使用了%d的格式说明符,那将告诉printf转到myChar的地址并获取接下来的4个字节以将其视为int。 如果是这种情况,似乎printf会从相邻变量中获取垃圾日期(因为它抓取了4个字节,但实际值只有1个字节)。 然而,情况似乎并非如此。 通过使用myChar并指定%d,printf抓取1个字节,然后用0表示填充高3个字节。 我的理解在这里是否正确? 如果上述情况属实,那么始终将变量提升到最大值是否有任何真正的危害,以避免在32/64位情况下出现的问题类型。 例如,如果你有一个短变量myShort和一个int变量myInt,那么打印它们总是有任何缺点: printf(“myShort%ld”,(long)myShort); printf(“myInt%ld”,(long)myInt); 谢谢你的任何澄清。