gpt4 book ai didi

c - MSP430 微 Controller 的 printf 支持

转载 作者:行者123 更新时间:2023-12-02 00:35:00 25 4
gpt4 key购买 nike

我正在使用不同的 C 编译器为德州仪器 (TI) MSP430 微 Controller 升级经过全面测试的 C 程序,从 Quadravox、AQ430 开发工具更改为 VisualGDB C 编译器。

该程序使用 VisualGDB 进行编译,零错误和零警告。中断服务例程、定时器、UART 控制等似乎都在工作。然而,sprintf 的某些用途不起作用。例如:

unsigned int duration;
float msec;

msec = (float)duration;

msec = msec / 125.0;

sprintf(glb_response,"break: %3.1f msec",msec);

这将返回:中断:%3.1f msec

这是预期的:中断:12.5 毫秒

我了解了以下内容(来自维基百科):

The compiler option --printf_support=[full | minimal | nofloat] allows you to use a smaller, feature limited, variant of printf/sprintf, and make that choice at build time.

The valid values are:

full: Supports all format specifiers. This is the default.

nofloat: Excludes support for printing floating point values. Supports all format specifiers except %f, %g, %G, %e, and %E.

minimal: Supports the printing of integer, char, or string values without width or precision flags. Specifically, only the %%, %d, %o, %c, %s, and %x format specifiers are supported

我需要对 printf 的全面支持。我知道我的产品上的 MSP430 将支持此功能,因为此 C 程序已使用多年。

我的问题是我不知道 1) VisualGDB 是否有办法将 printf 支持设置为完全,2) 如果有,在哪里设置它。

任何及所有评论和答案将不胜感激。

最佳答案

我建议完全支持浮点既不必要又不明智。解决一个小问题需要大量的代码;如果没有浮点硬件,出于性能、代码空间和内存使用的原因,在任何情况下通常最好避免浮点运算。

因此,duration 的单位为 1/125000 秒,并且您希望输出精度为 0.1 毫秒的值。所以:

unsigned msec_x10 = duration * 10u / 125u ;

sprintf( glb_response,
"break: %u.%u msec",
msec_x10 / 10,
msec_x10 % 10 ) ;

如果您想要四舍五入到最接近的十分之一(而不是向下舍入),则:

unsigned msec_x10 = ((duration * 20u) + 125 ) / 250u ;

关于c - MSP430 微 Controller 的 printf 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com