[技术问答] MA35D1 RTP printf float問題

[复制链接]
3355|5
 楼主| probedog 发表于 2024-5-14 15:44 | 显示全部楼层 |阅读模式
手册中有提到M4具有浮点数的支援,我想要利用printf打印出float的数值,UART却没有办法显示该数值。
以下是我用Template测试的代码,想请问要如何正确打印出float值呢?

感谢回覆

#include <stdio.h>
#include "NuMicro.h"


void SYS_Init(void)
{

    /* Enable UART module clock */
    CLK_EnableModuleClock(UART16_MODULE);

    /* Select UART module clock source as HXT and UART module clock divider as 1 */
    CLK_SetModuleClock(UART16_MODULE, CLK_CLKSEL3_UART16SEL_HXT, CLK_CLKDIV3_UART16(1));

    /* Set GPD multi-function pins for UART16 RXD and TXD */
    SYS->GPD_MFPH &= ~(SYS_GPD_MFPH_PD10MFP_Msk | SYS_GPD_MFPH_PD11MFP_Msk);
    SYS->GPD_MFPH |= SYS_GPD_MFPH_PD10MFP_UART16_RXD | SYS_GPD_MFPH_PD11MFP_UART16_TXD;

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and CyclesPerUs automatically. */
    SystemCoreClockUpdate();
}

/* Main */
int main(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Init System, IP clock and multi-function I/O. */
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART16, 115200);

    float test = 1.5;
    printf("test = %f\n", test);

    return 0;
}
奔跑的牛 发表于 2024-6-7 17:40 | 显示全部楼层
请参考牛卧堂上相同的问题回复
两只袜子 发表于 2024-8-20 19:06 | 显示全部楼层
一楼在这里在回复一下不是更好
雾都浪漫 发表于 2025-8-30 13:51 | 显示全部楼层
MA35D1 的 RTP 中 printf 打印 float 异常,多因未启用浮点数支持。需在编译选项加 - mfloat-abi=hard 等,链接相应库,确保工具链配置正确。
我趴在云边 发表于 2025-9-17 13:46 | 显示全部楼层
MA35D1 的 RTP 环境中 printf 输出 float 异常,多因编译器默认不支持浮点格式化。需在编译选项加 - lm 链接数学库,或修改 printf 实现。也可将 float 转为字符串输出,如用 sprintf (buf,"%.2f",num),确保标准库配置正确,优先用新唐提供的 BSP 避免库兼容问题。


牛奶秋刀鱼 发表于 2025-9-23 17:55 | 显示全部楼层
MA35D1 的 RTP(实时处理单元)printf 无法输出 float,多因编译配置或库支持问题。1. 未启用浮点打印功能,需在编译选项加-u _printf_float链接浮点库;2. RTP 使用的精简 C 库(如 newlib-nano)默认不支持 float 打印,需替换为完整版库;3. 检查 printf 格式符是否正确(如 % f 而非 % d),确保代码中 float 变量未被类型转换错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

493

主题

3361

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部