www.mikrocontroller.net

Forum: Compiler & IDEs cien


Autor: Textarbeit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab mir grad mal einen code "zusammengeschustert" für ein Lauflicht, 
klappt auch alles, ist aber eher un schön gemacht.
irgendwelche Tipps für die Funktion move_text um diese effizienter zu 
machen???
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <string.h>

#include <lcd.h>

#define length 30
char sLauftext[length+1];

char* move_text(char* test)
{
 char sTmp[2];
 char sLauftextTmp[length+1];
 uint8_t i;
 
 strcpy(sLauftext,test);
 strcpy(sLauftextTmp,sLauftext);

 sTmp[0]=sLauftext[0];
 sTmp[1]='\0';
 for (i=1;i<length+1;i++)
 {
  sLauftextTmp[i-1]=sLauftext[i];  
 }
 strcat(sLauftextTmp,sTmp);
 strcpy(sLauftext,sLauftextTmp);

 return sLauftext;
}


void wait (uint16_t zeit) //zeit: wartezeit in ms (0 bis 65536)
{
   uint16_t i;
   for(i=0;i<zeit;i++) _delay_ms(1); //da für _delay_ms max Takt-abhängige Werte erlaubt
} 

int main (void) 
{  
  char sLauftext[length+1];

  lcd_init(LCD_DISP_ON);
  lcd_clrscr();
  strcpy(sLauftext,"Dies ist der Lauftext Test   ");
  lcd_puts(sLauftext);
  wait(1000);

while(1)
{ 
  lcd_clrscr();
  strcpy(sLauftext,move_text(sLauftext)); 
  lcd_puts(sLauftext);
  wait(200);
}

return 0;           
}

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char* move_text(char* text)
{
  char tmp = text[length - 1];

  int n;
  for(int n = length; n > 1; n--)
  {
    text[n-1] = text[n-2];
  }

  text[0] = tmp;

  return text;
}

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das "int" nach "for" muss noch weg.

Autor: Textarbeit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist ja schon mal kompakter, aber der text sollte schon nach links 
laufen, damit man auch vom anfang anfängt zu lesen und nicht am ende 
startet

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso programmierst Du es dann nicht einfach um?

Autor: Textarbeit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da hab ich aber schon wieder das problem mit dem char welches 
zwischengespeichert wird
der Text wird jetzt zwar nach links durchgeschoben, aber irgendwie 
klappt das mit dem Anfügen des ersten Buchstaben nicht (deswegen hatt 
ichs so umständlich über string operationen)
char* move_text(char* text)
{
  char tmp = text[0];

  uint8_t i;
  for( i = 0; i<length; i++)
  {
    text[i] = text[i+1];
  }
  text[length] = tmp;

  return text;
}
wo ist der denkfehler?

Autor: cien (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich merk grad ich hab im ersten post aus versehen Lauflicht geschrieben, 
soll natürlich Lauftext heißen

Autor: cien (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Problem ist einfach, dass der Text zwar ordendlich nach links 
durchgereicht wird, aber der Text eben bis zum Ende durchgereicht wird 
und dann wieder von vorne startet und nicht wie in meiner 
"zusammengeschusterten" version der text vorne abgeschnitten und hinten 
wieder angefügt wird um einen flüssigen Übergang zu schaffen
@admin: wäre es möglich den Namen des threads in Textarbeit zu ändern, 
hatte da zwei zeilen vertauscht :(

Autor: cien (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, es lag an "length", da dies ein fester wert war und nicht der 
tatsächlichen Länge des strings entsprach
char* move_text(char* text, uint8_t len)
{
  char tmp = text[0];  
  uint8_t i;

  for( i = 0; i<len; i++)
  {
    text[i] = text[i+1];
  }
  text[len-1] = tmp;
  return text;
}
habs einfach so gelöst, dass ich einmalig im main-Programm dei Länge 
abfrage und diese einfach der Funktion mitgebe
und siehe da, es klappt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.