zoukankan      html  css  js  c++  java
  • 014:针对mdk中STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决(转)

    在网上搜了下,发现有很多这样的问题,我也遇到了,最后解决了,我在此总结一下:

    问题1(与编译软件无关):在程序中加入printf语句实现串口输出,但未写重定向函数fputc,出现编译无任何警号和错误直接下载无法运行,软件仿真可以运行至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”处无法继续运行。

    解决办法:编写fputc函数如下:

    1 int fputc(int ch, FILE *f)
    2 {
    3           USART_SendData(USART1, (uint8_t) ch);
    4         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    5         {}
    6         return ch;
    7 }

    问题2(与编译软件有关):重定向函数fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微库,即MiclroLIB,因printf()之类的函数,使用了半主机模式。使用微库的话,不会使用半主机模式,所以就没有问题。 


    解决办法:在option for target->target 对话框中,选择Use MiclroLIB,重新编译程序即可。

    问题3:重定向函数fputc编写无误,不用微库,即MiclroLIB,依然可以使用printf

    解决办法:
    在程序中加入如下语句:

     1 #pragma import(__use_no_semihosting) 
     2 _sys_exit(int x) 
     3 { 
     4 x = x; 
     5 } 
     6 struct __FILE 
     7 { 
     8 int handle; 
     9 /* Whatever you require here. If the only file you are using is */ 
    10 /* standard output using printf() for debugging, no file handling */ 
    11 /* is required. */ 
    12 }; 
    13 /* FILE is typedef’ d in stdio.h. */ 
    14 FILE __stdout;

    此代码功能用于避免使用semhosting(半主机模式)


    问题4:使用的是MDK4.22-3.40之间的编译环境,不想使用微库,也不想加入问题三语句。

    解决办法:
    更换低版本的MDK,3.4以下吧,本人试验使用mdk3.24不勾选MiclroLIB,也不加入问题三语句,能够正常使用printf,无任何问题。

    这是我遇到问题后找到的解决办法。如有问题请大家指正。还有一个问题没有解决就是选择Use MiclroLIB后编译出错,提示如下:
    .\Obj\XXXX.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from stm32f10x_startup.o).
    .\Obj\XXXX.axf: Error: L6218E: Undefined symbol __initial_sp (referred from entry2.o).
    的错误不知道为什么,希望有知道的能解决一下。

  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/afeibfp/p/2857877.html
Copyright © 2011-2022 走看看