u8glib ohne blockierung?

Gast #4449099
Hallo,

gibt es eine Möglichkeit, die u8glib so nutzen, dass diese nicht den 
Ablauf blockiert? Problem ist, ich rufe alle 5ms eine Funktion auf, die 
wird durch das Display sehr start ausgebremmst. Schön wäre es, wenn ich 
einmalig den Speicher beschreibe, und das ganze dann dargestellt wird, 
ohne das ich da selber erneut die Funktion aufrufen muss. Sowas wie eine 
ISR, die alle x ms den nächsten Befehl schickt.
1
void draw(uint8_t *data)
2
{
3
  u8g_FirstPage(&u8g);
4
  do
5
  {
6
    u8g_SetFont(&u8g, u8g_font_6x10);
7
    u8g_DrawStr(&u8g, 4, 63, "0");
8
    u8g_DrawStr(&u8g, 20, 63, "1");
9
    u8g_DrawStr(&u8g, 36, 63, "2");
10
    u8g_DrawStr(&u8g, 52, 63, "3");
11
    u8g_DrawStr(&u8g, 68, 63, "4");
12
    u8g_DrawStr(&u8g, 84, 63, "5");
13
    u8g_DrawStr(&u8g, 100, 63, "6");
14
    u8g_DrawStr(&u8g, 116, 63, "7");
15
    
16
    for(uint8_t i = 0; i < 8; i++)
17
    {
18
      uint8_t y = ((data[i])/8)+1;
19
      for(uint8_t j = 63; j > 63 - y ; j--)
20
      u8g_DrawHLine(&u8g, 2+(i*16)-1, j-12, 12);
21
    }
22
  }
23
}
@ Sascha (Gast)

>gibt es eine Möglichkeit, die u8glib so nutzen, dass diese nicht den
>Ablauf blockiert?

Welche Funktion der Lib blockiert denn deinen Ablauf?

> Problem ist, ich rufe alle 5ms eine Funktion auf, die
>wird durch das Display sehr start ausgebremmst.

Wieso? Wenn dein 5ms Funktion in einer Timer-ISR steckt, kann deine Lib 
gar nicht bremsen.

> Schön wäre es, wenn ich
>einmalig den Speicher beschreibe, und das ganze dann dargestellt wird,
>ohne das ich da selber erneut die Funktion aufrufen muss.

Muss du bei der Lib sicher auch nicht.

> Sowas wie eine
>ISR, die alle x ms den nächsten Befehl schickt.

>void draw(uint8_t *data)

Was ist mit dieser Funktion?
Gast
arg, oben der Code war nicht vollständig
1
void draw(uint8_t *data)
2
{
3
  u8g_FirstPage(&u8g);
4
  do
5
  {
6
    u8g_SetFont(&u8g, u8g_font_6x10);
7
    u8g_DrawStr(&u8g, 4, 63, "0");
8
    u8g_DrawStr(&u8g, 20, 63, "1");
9
    u8g_DrawStr(&u8g, 36, 63, "2");
10
    u8g_DrawStr(&u8g, 52, 63, "3");
11
    u8g_DrawStr(&u8g, 68, 63, "4");
12
    u8g_DrawStr(&u8g, 84, 63, "5");
13
    u8g_DrawStr(&u8g, 100, 63, "6");
14
    u8g_DrawStr(&u8g, 116, 63, "7");
15
    
16
    for(uint8_t i = 0; i < 8; i++)
17
    {
18
      uint8_t y = ((data[i])/8)+1;
19
      for(uint8_t j = 63; j > 63 - y ; j--)
20
      u8g_DrawHLine(&u8g, 2+(i*16)-1, j-12, 12);
21
    }
22
  }while(u8g_NextPage(&u8g));
23
}
Problem ist, dass die Schleife solange abgearbeitet wird, biw 
u8g_Nextpage erkannt wird. Das rausschicken dauert scheinbar seine Zeit. 
Zeitmessung kann ich gleich raussuchen.
@Sascha (Gast)

>arg, oben der Code war nicht vollständig

Warum? Hast du ihn abgetippt? NEIN!

https://www.mikrocontroller.net/articles/Netiquette#.C3.84u.C3.9Fere_Form

"Quelltext nie abtippen, sonder immer das direkt kopierte Original 
posten, anderenfalls schleichen sich neue Fehler ein oder die 
existierenden werden nicht abgeschrieben."

>Problem ist, dass die Schleife solange abgearbeitet wird, biw
>u8g_Nextpage erkannt wird.

Logisch.

> Das rausschicken dauert scheinbar seine Zeit.

Auch klar.

>Zeitmessung kann ich gleich raussuchen.

Nebensächlich. Wo ist denn deine 5ms Funktion? Wo wird die aufgerufen?

Netiquette!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.