cien

Gast #529435
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???
1
#include <avr/io.h>
2
#include <stdlib.h>
3
#include <util/delay.h>
4
#include <string.h>
5

6
#include <lcd.h>
7

8
#define length 30
9
char sLauftext[length+1];
10

11
char* move_text(char* test)
12
{
13
 char sTmp[2];
14
 char sLauftextTmp[length+1];
15
 uint8_t i;
16
 
17
 strcpy(sLauftext,test);
18
 strcpy(sLauftextTmp,sLauftext);
19

20
 sTmp[0]=sLauftext[0];
21
 sTmp[1]='\0';
22
 for (i=1;i<length+1;i++)
23
 {
24
  sLauftextTmp[i-1]=sLauftext[i];  
25
 }
26
 strcat(sLauftextTmp,sTmp);
27
 strcpy(sLauftext,sLauftextTmp);
28

29
 return sLauftext;
30
}
31

32

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

39
int main (void) 
40
{  
41
  char sLauftext[length+1];
42

43
  lcd_init(LCD_DISP_ON);
44
  lcd_clrscr();
45
  strcpy(sLauftext,"Dies ist der Lauftext Test   ");
46
  lcd_puts(sLauftext);
47
  wait(1000);
48

49
while(1)
50
{ 
51
  lcd_clrscr();
52
  strcpy(sLauftext,move_text(sLauftext)); 
53
  lcd_puts(sLauftext);
54
  wait(200);
55
}
56

57
return 0;           
58
}
Gast #529475
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)
1
char* move_text(char* text)
2
{
3
  char tmp = text[0];
4

5
  uint8_t i;
6
  for( i = 0; i<length; i++)
7
  {
8
    text[i] = text[i+1];
9
  }
10
  text[length] = tmp;
11

12
  return text;
13
}
wo ist der denkfehler?
Gast #529509
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 :(
Gast #529510
Lesenswert?
• ▲
▼
ok, es lag an "length", da dies ein fester wert war und nicht der 
tatsächlichen Länge des strings entsprach
1
char* move_text(char* text, uint8_t len)
2
{
3
  char tmp = text[0];  
4
  uint8_t i;
5

6
  for( i = 0; i<len; i++)
7
  {
8
    text[i] = text[i+1];
9
  }
10
  text[len-1] = tmp;
11
  return text;
12
}
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

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.

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.