Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ESP32 printf

Başlatan mr.engineer, 13 Mayıs 2022, 22:55:46

mr.engineer

Merhaba,

Projenin içinde çok sayıda printf fonksiyonu (UART ile terminale yazıları göndermek için) var. Run-time'da bu printf fonksiyonlarını açıp kapatmak istiyorum. Yani kapatınca artık log çıkışı duracak.

Şöyle bir fonksiyon var ama işe yaramadı ya da ben kullanamadım:
vprintf_like_tesp_log_set_vprintf(vprintf_like_tfunc);

Log çıkışının UART0 yerine başka bir kaynağa aktarılmasını sağlıyor.

Fikri olan var mı?

NoT: Bu işlemi run-time'da yapacağım o yüzden menuconfig'den logu kapatmak işe yaramayacak.

z

Her bir printf komutunu if icine koy. Debug diye bir degisken tanimla

if (Debug)
  {
    printf(....);
  }
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mr.engineer

Alıntı yapılan: z - 13 Mayıs 2022, 23:42:44Her bir printf komutunu if icine koy. Debug diye bir degisken tanimla

if (Debug)
  {
    printf(....);
  }

Hocam bunu yapmamak için sormuştum:)
200 tane printf var hepsini if içine almak çok yorucu olacak. Bir de kodun görüntüsü bozulacak gereksiz yer kaplayacaklar.

z

#3
replace ile yap.

search kismina printf
replace kismina if (debug) printf diyeceksin. Editor komple programi degistirecek.

sprintf falan varsa dikkatli ol.

Yanlis hatirlamiyorsam putch gibi bir fonksiyon vardi. Onu degistirirsen de olmasi lazim.  Dene.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mr.engineer

Alıntı yapılan: z - 14 Mayıs 2022, 00:13:35replace ile yap.

search kismina printf
replace kismina if (debug) printf diyeceksin. Editor komple programi degistirecek.

sprintf falan varsa dikkatli ol.

Yanlis hatirlamiyorsam putch gibi bir fonksiyon vardi. Onu degistirirsen de olmasi lazim.  Dene.


Evet bu daha kolay. ESPnin hazır bir fonksiyonu ile cozemessem bu şekilde yapacam artık.

brandice5

#include <stdio.h>
#define LOG(...) if(debug) printf(__VA_ARGS__)

int debug = 0;

int main()
{
    debug = 1;
    LOG("bu yazilacak\n");
    
    debug = 0;
    LOG("bu yazilmayacak\n");
    
    debug = 1;
    LOG("bu tekrar yazilacak\n");

    return 0;
}

hasankara

esp_log_level_set("*", ESP_LOG_NONE);
 yada
esp_log_level_set("*", ESP_LOG_INFO);

mr.engineer

Alıntı yapılan: hasankara - 14 Mayıs 2022, 14:25:46esp_log_level_set("*", ESP_LOG_NONE);
 yada
esp_log_level_set("*", ESP_LOG_INFO);

Bunlar printf için işe yaramıyor. Galiba sadece ESP_LOGI, ESP_LOGW.. ile başlayan fonksiyonlarda kullanılıyor.

hasankara

Alıntı yapılan: mr.engineer - 14 Mayıs 2022, 15:26:20Bunlar printf için işe yaramıyor. Galiba sadece ESP_LOGI, ESP_LOGW.. ile başlayan fonksiyonlarda kullanılıyor.
::ok