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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren