搜索
bottom↓
回复: 2

请教:Keil uVision5 编译中文乱码 是什么原因?

[复制链接]

出0入55汤圆

发表于 2019-2-23 15:21:15 | 显示全部楼层 |阅读模式
初始化时是正确的。例如:

  1. int main(void)
  2. {
  3.         USART1_Config(115200);        //打印
  4.         LCD_Config();
  5.         printf("这是中文");    //打印正确
  6.         SysTick_Init();
  7.         while(1)
  8.         {
  9.                 if(tick_10ms>9)
  10.                 {
  11.                         tick_10ms = 0;
  12.                         menu_task(&s_tMenuDemo);  //傻孩子大师的新菜单
  13.                 }
  14.                
  15.                 if(tick_100ms>99)
  16.                 {
  17.                         tick_100ms = 0;
  18.                 }
  19.         }
  20. }
复制代码


在傻孩子大师的新菜单项中打印就乱码,直接printf打印串口显示的。显示到12864屏幕上也一样,请教各位,这是什么原因?
不知道是不是打开 #pragma anon_unions                        //匿名结构体需要
还有打勾了 -C99  的编译


  1. #ifndef __BSP_MENU_H__
  2. #define __BSP_MENU_H__

  3. #pragma anon_unions                        //匿名结构体需要

  4. #include <stdio.h>  //printf( "\r\n USART1  Initialize Success!\r\n" );
  5. #include <string.h> //memset(buf,0,sizeof(buf));清零 memcpy(,,)

  6. #include "stm32f10x.h"



  7. #define this            (*ptThis)

  8. #define UBOUND(__ARR)    (sizeof(__ARR)/sizeof(__ARR[0]))

  9. #ifndef __FSM_RT_TYPE__
  10. #define __FSM_RT_TYPE__
  11. //! \name finit state machine state
  12. //! @{
  13. typedef enum {
  14.     fsm_rt_err          = -1,    //!< fsm error, error code can be get from other interface
  15.     fsm_rt_cpl          = 0,     //!< fsm complete
  16.     fsm_rt_on_going     = 1,     //!< fsm on-going
  17.     fsm_rt_wait_for_obj = 2,     //!< fsm wait for object
  18.     fsm_rt_asyn         = 3,     //!< fsm asynchronose complete, you can check it later.
  19. } fsm_rt_t;
  20. //! @}

  21. #endif

  22. /*============================ MACROS ========================================*/
  23. /*============================ MACROFIED FUNCTIONS ===========================*/

  24. #define __declare_menu_item_template(__NAME)                                    \
  25.     typedef struct __##__NAME __NAME;
  26. #define declare_menu_item_template(__NAME)                                      \
  27.         __declare_menu_item_template(__NAME)
  28.    
  29. #define __def_menu_item_template(__NAME)                                        \
  30.     struct __##__NAME {                                                         \
  31.         menu_item_t;                                                            
  32. #define def_menu_item_template(__NAME)                                          \
  33.             __def_menu_item_template(__NAME)                                    

  34. #define end_def_menu_item_template(__NAME)                                      \
  35.     };

  36. #define __def_menu(__NAME, __PARENT, __ENGINE, __TEMPLATE)                      \
  37. extern const menu_t c_tMenu##__NAME;                                            \
  38. __TEMPLATE c_tMenu##__NAME##Items[] = {
  39. #define def_menu(__NAME, __PARENT, __ENGINE)                                    \
  40.             __def_menu(__NAME, (__PARENT), (__ENGINE), default_menu_item_t)
  41.             
  42. #define def_menu_ex(__NAME, __PARENT, __ENGINE, __TEMPLATE)                     \
  43.             __def_menu(__NAME, (__PARENT), (__ENGINE), __TEMPLATE)

  44. #define __end_def_menu(__NAME, __PARENT, __ENGINE, __TEMPLATE)                  \
  45.     };                                                                          \
  46.     const menu_t c_tMenu##__NAME = {                                            \
  47.         (menu_item_t *)c_tMenu##__NAME##Items,                                  \
  48.         (sizeof(c_tMenu##__NAME##Items)/sizeof(__TEMPLATE)),                    \
  49.         (menu_t *)(__PARENT),                                                   \
  50.         (__ENGINE),                                                             \
  51.     };
  52. #define end_def_menu(__NAME, __PARENT, __ENGINE)                                \
  53.             __end_def_menu(__NAME, (__PARENT), (__ENGINE), default_menu_item_t)
  54. #define end_def_menu_ex(__NAME, __PARENT, __ENGINE, __TEMPLATE)                 \
  55.             __end_def_menu(__NAME, (__PARENT), (__ENGINE), __TEMPLATE)
  56.             
  57. #define __extern_menu(__NAME)   extern const menu_t c_tMenu##__NAME;
  58. #define extern_menu(__NAME)     __extern_menu(__NAME)

  59. #define __menu(__NAME)          c_tMenu##__NAME
  60. #define menu(__NAME)            __menu(__NAME)            
  61.          
  62. #define __menu_item(__HANDLER, __CHILD_MENU, ...)                               \
  63.     {                                                                           \
  64.         (__HANDLER),                                                            \
  65.         (menu_t *)(__CHILD_MENU),                                               \
  66.         __VA_ARGS__,                                                            \
  67.     },
  68. #define menu_item(__HANDLER, __CHILD_MENU, ...)                                 \
  69.             __menu_item((__HANDLER), (__CHILD_MENU), __VA_ARGS__)

  70. /*============================ TYPES =========================================*/

  71. typedef struct __menu_item                  menu_item_t;                //菜单项
  72. typedef struct __menu                              menu_t;                                //菜单容器
  73. typedef struct __menu_engine_cb         menu_engine_cb_t;        //菜单引擎?

  74. typedef fsm_rt_t menu_item_handler_t(menu_item_t *);        //菜单项消息处理引擎
  75. typedef fsm_rt_t menu_engine_t(menu_engine_cb_t *);                //菜单容器消息处理引擎

  76. //菜单项 基类
  77. struct __menu_item {
  78.     menu_item_handler_t *fnHandle;                      //!< handler
  79.     menu_t              *ptChild;                       //!< Child Menu
  80. };

  81. //菜单容器 基类
  82. struct __menu {
  83.     menu_item_t        *ptItems;                        //!< menu item list
  84.     uint_fast8_t        chCount;                        //!< menu item count
  85.     menu_t             *ptParent;                       //!< parent menu;
  86.     menu_engine_t      *fnEngine;                       //!< engine for process current menu
  87. };

  88. //菜单引擎?
  89. struct __menu_engine_cb {
  90.     uint_fast8_t    tState;
  91.     const menu_t    *ptCurrentMenu;                //指向当前菜单容器
  92.     uint_fast8_t    chCurrentItemIndex;        //当前菜单容器中的菜单项索引号
  93. };
  94. /*============================ 以上是基类 =========================================*/

  95. /*===================== 派生类 默认菜单项 ====================================*/
  96. typedef struct __default_menu_item_t  default_menu_item_t;        //派生类 默认菜单项
  97. struct __default_menu_item_t   {

  98.     //! inherit from base class menu_item_t
  99.     menu_item_t;

  100.     //! depends on your application, you can add/remove/change following members
  101.     char                *pchTitle;                      //!< Menu Title
  102.     char                *pchDescription;                //!< Description for this menu item
  103.     char                chShortCutKey;                  //!< Shortcut Key value in current menu
  104. };

  105. /*===================== 派生类 默认菜单项初始化 ================================*/
  106. extern fsm_rt_t top_menu_engine(menu_engine_cb_t *ptThis);                //菜单容器处理函数
  107. extern fsm_rt_t top_menu_item_a_handler(menu_item_t *ptItem);        //菜单项a处理函数
  108. extern fsm_rt_t top_menu_item_b_handler(menu_item_t *ptItem);        //菜单项b处理函数
  109. extern fsm_rt_t top_menu_item_c_handler(menu_item_t *ptItem);        //菜单项c处理函数

  110. extern const menu_t c_tTopMenu;        //顶层菜单容器

  111. void Display_top_menu(menu_engine_cb_t*ptThis);

  112. /*===================== 派生类 默认菜单项初始化 ================================*/
  113. extern fsm_rt_t lv2_menu_engine(menu_engine_cb_t *ptThis);                //菜单容器处理函数
  114. extern fsm_rt_t lv2_menu_item_1_handler(menu_item_t *ptItem);        //菜单项处理函数
  115. extern fsm_rt_t lv2_menu_item_2_handler(menu_item_t *ptItem);        //菜单项处理函数
  116. extern fsm_rt_t lv2_menu_item_3_handler(menu_item_t *ptItem);        //菜单项处理函数

  117. extern const menu_t lv2_menu_A;        //菜单容器

  118. fsm_rt_t menu_task(menu_engine_cb_t *ptThis);

  119. #endif



复制代码

  1. //菜单项b处理函数
  2. fsm_rt_t top_menu_item_b_handler(menu_item_t *ptItem)
  3. {
  4.         printf("这是 B          ");  //打印乱码成【杩欐槸 B          】
  5.     return fsm_rt_cpl;
  6. }
复制代码

出0入0汤圆

发表于 2019-2-23 15:40:24 | 显示全部楼层
记事本打开你调用printf的源文件,另存时看你的编码属性,一般我们都是用的ANSI(本地编码,中文windows系统就是GBK),如果你UTF-8,你的串口软件要支持UTF-8,大部分串口助手仅支持GBK。

使用notepad++之类的编辑器查看也比较方便。

出0入55汤圆

 楼主| 发表于 2019-2-23 15:57:43 | 显示全部楼层
Eric2013 发表于 2019-2-23 15:40
记事本打开你调用printf的源文件,另存时看你的编码属性,一般我们都是用的ANSI(本地编码,中文windows系 ...

用notepad++将源文件转成ANSI格式,解决问题了。
多谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 15:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表