emWin模擬器Visual Studio開發時無法printf打印的問題


1、emWin模擬器

為了方便用戶學習evWin框架,Segger設計了一個PC仿真的工具,可以測試絕大部分GUI的功能,除了方便使用者學習之外,還可以加速項目開發進度。畢竟在PC上用Visual Studio開發的效率比單片機開發高出很多。

在使用vs2017模擬開發emWin時,發現官方帶的demo無法實施輸出console控制台信息,即無法printf消息。

2、常見解決方法

無法在emWin上使用打印消息,當然有很多解決方法,比如:

1)在GUI上借助emWin強大的功能,創建一個文本框顯示需要打印的消息,曲線救國,好處在單片機上也能實現,不用任何代碼特殊修改,缺點是資源受限且使用繁瑣。

2)按照PC開發的經驗,啟動log組件,nuget安裝即可,如果是規模稍大的項目,這是首選。如果是為了學習嵌入式GUI而言,或者就是一個幾個窗體的小工程,那就沒有必要了,畢竟除了麻煩,還有加了之后嵌入式系統裝不進去最終還得刪除。

3)使用printf,對學習嵌入式開發者來說再熟悉不過了。開銷小,基本上不用修改軟件代碼,模擬器和芯片都可以使用,在PC模擬器上從console輸出,在嵌入式芯片上從串口或Jlink RTT輸出。或者#define PRINTF printf,當release時候把宏設置為空,直接減少了代碼量。

3、使用printf

vs設置路徑:

Project | Properties->Configuration Properties->Build Events->Post-Build Event

在Command Line新加一行命令:editbin /SUBSYSTEM:CONSOLE $(TargetPath)

其中,$(TargetPath)  就是生成好的exe程序。

當然為了使用printf,必須添加printf的標准庫:#include <stdio.h>

下圖示vs2017添加方法:

4、測試代碼

#include "GUI.h"
#include <stdio.h>
//
// Recommended memory to run the sample with adequate performance
//
#define RECOMMENDED_MEMORY (1024L * 5)

/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
    GUI_Init();
    //
    // Check if recommended memory for the sample is available
    //
    if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
        GUI_ErrorOut("Not enough memory available.");
        return;
    }

    I16 ay[200];
    int i = 0;
    for (i = 0; i < GUI_COUNTOF(ay); i++)
    {
        if (i > 0 && i % 10 == 0) printf("\r\n");
        ay[i] = rand() % 50;
        printf("%3d ", ay[i]);
    }

    printf("\r\nTest GUI_DrawGraph function. Graph length = %d",  GUI_COUNTOF(ay));
    GUI_DrawGraph(ay, GUI_COUNTOF(ay), 0, 0);

  while(1);
}

5、測試效果

 

技術博客,轉載請注明。

https://www.cnblogs.com/pingwen/p/12545807.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM