Hallo,
ich will das string array tText[] an die Funktion Menu_Set4LinesX()
übergeben, die die einzelnen strings dann aus dem PROGMEM lesen und via
printf() ausgeben soll.
Der Compiler meckert zwar nicht, aber es funktioniert leider nicht, da
das Programm nur kryptische chars ausdruckt. Irgendwo habe ich mich mit
den string pointern wohl verhaspelt.
Ich würde mich freuen, wenn ihr mir weiter helfen könnt.
Grüße
Manni
P.S.: ich verwende das Atmel Studio 7
1 | /*
|
2 | ** CPU ist ATmega644
|
3 | */
|
4 |
|
5 | #define SYSCLOCK 20000000 // Crystal Frequency in Hz
|
6 | #define F_CPU SYSCLOCK // Crystal Frequency in Hz
|
7 | #define PROGMEM_MAXLEN 20
|
8 |
|
9 | #include <stdio.h>
|
10 | #include <avr/io.h>
|
11 | #include <string.h>
|
12 | #include <avr/pgmspace.h>
|
13 | #include <util/delay.h>
|
14 |
|
15 |
|
16 | void Menu_Set4LinesX (char** cString);
|
17 | void Menu_SetStringFromProgMemX (char* str);
|
18 | char *Menu_ProgMem_GetTextX (char* str);
|
19 |
|
20 | const char tText1[] PROGMEM = "Text1";
|
21 | const char tText2[] PROGMEM = "Text2";
|
22 | const char tText3[] PROGMEM = "Text3";
|
23 | const char tText4[] PROGMEM = "Text3";
|
24 | const char* const tText[] PROGMEM = {tText1, tText2, tText3, tText4};
|
25 |
|
26 |
|
27 | int main (void)
|
28 | {
|
29 | while (1)
|
30 | {
|
31 | Menu_Set4LinesX ((char**) tText);
|
32 | _delay_ms (2000);
|
33 | }
|
34 | }
|
35 |
|
36 |
|
37 | void Menu_Set4LinesX (char** cString)
|
38 | {
|
39 | Menu_SetStringFromProgMemX (cString[0]);
|
40 | Menu_SetStringFromProgMemX (cString[1]);
|
41 | Menu_SetStringFromProgMemX (cString[2]);
|
42 | Menu_SetStringFromProgMemX (cString[3]);
|
43 | return;
|
44 | }
|
45 |
|
46 | void Menu_SetStringFromProgMemX (char* str)
|
47 | {
|
48 | char *Text;
|
49 | Text = Menu_ProgMem_GetTextX (str);
|
50 | printf ("%s\n", Text);
|
51 | return;
|
52 | }
|
53 |
|
54 | char *Menu_ProgMem_GetTextX (char* str)
|
55 | {
|
56 | static char Text[PROGMEM_MAXLEN];
|
57 | char *pText;
|
58 | uint8_t len = 0;
|
59 |
|
60 | pText = Text;
|
61 | while (1)
|
62 | {
|
63 | *pText = pgm_read_byte (str++);
|
64 | if (*pText == '\0') return Text;
|
65 | if (len == (PROGMEM_MAXLEN-1))
|
66 | {
|
67 | *pText = '\0';
|
68 | return Text;
|
69 | }
|
70 | len++;
|
71 | pText++;
|
72 | }
|
73 | }
|