IAR下,STM8用printf默认是不支持32位输出的,不过被我找到办法了,共享下.

2019-07-19 20:24发布

默认的(temp为32位数组):
 printf("0X%X",temp);//16进制参数显示   
会报警告,且无法正确使用.
改为:
 printf("0X%lX",temp);//16进制参数显示  
就OK了.
其实就是加多一个小写的"L",即 long 型...
问题解决! 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
wuxichengxv
2019-07-20 11:44

/*
*********************************************************************************************************
*
* 模块名称 : printf模块
* 文件名称 : bsp_printf.c
* 版    本 : V2.0
* 说    明 : 实现printf和scanf函数重定向到串口1,即支持printf信息到UART1
*    实现重定向,只需要添加2个函数:
*    int fputc(int ch, FILE *f);
*    int fgetc(FILE *f);
*
*    这个c模块无对应的h文件。
*    如果需要应用程序支持 printf 函数,只用将 bsp_printf.c 这个文件添加到工程即可。
*
* 修改记录 :
*  版本号  日期       作者    说明
*  v1.0    2012-10-12 armfly  ST固件库版本 V2.1.0
*
* Copyright (C), 2012-2013, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/

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

/*
 由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。
 因此此处采用宏定义的方式区别。

 _RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏
*/
#ifdef _RAISONANCE_
 #define PUTCHAR_PROTOTYPE int putchar (char c)
 #define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
 #define PUTCHAR_PROTOTYPE char putchar (char c)
 #define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
 #define PUTCHAR_PROTOTYPE int putchar (int c)
 #define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */

/*
*********************************************************************************************************
* 函 数 名: putchar
* 功能说明: 重定义 putchar 函数, 这样可以使用printf函数从串口1打印输出
* 形    参: 等待发送的字符
* 返 回 值: 返回已发送的字符
*********************************************************************************************************
*/
PUTCHAR_PROTOTYPE
{
 /* 发送一个字符 c 到UART1 */
 UART1_SendData8(c);

 /* 等待发送完毕 */
 while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);

 return (c);
}

/*
*********************************************************************************************************
* 函 数 名: getchar
* 功能说明: 重定义C库中的 getchar 函数,这样可以使用scanff函数从串口1输入数据
* 形    参: 无
* 返 回 值: 返回已读到的字符
*********************************************************************************************************
*/
GETCHAR_PROTOTYPE
{
 #ifdef _COSMIC_
  char c = 0;
 #else
  int c = 0;
 #endif

 /* 等待新数据到达  */
 while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);

 /* 读取数据寄存器 */
 c = UART1_ReceiveData8();

 return (c);
}

/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

一周热门 更多>