-
Atmega: pgm
Hallo zusammen!
Ich habe eine Menüstruktur welche durch eine Tabelle festgelegt wird.
Code:
// ---------------------------
261 // description of the pages
262 // ---------------------------
263 const menu_page_desc_t pages[] PROGMEM =
264 {
265 // page title page action line1 line2 line3
266 { page_overview, title_overview, nullptr, &overview_line1, &overview_line2, &overview_line3},
267 { page_overview_2, title_overview, nullptr, &overview2_line1, &overview2_line2, &overview2_line3},
268
269 { page_usage_water, title_usage_water, nullptr, &usage_water_print, nullptr, nullptr},
270 { page_usage_water_set, title_usage_water_set, &set_temp_usage_water_func, &usage_water_print, nullptr, nullptr},
271
272 { page_date, title_date, nullptr, &print_date, &print_time, nullptr},
273 { page_date_year_set, title_date_year_set, &set_year, &print_date, &print_time, nullptr},
274 { page_date_month_set, title_date_month_set, &set_month, &print_date, &print_time, nullptr},
275 { page_date_day_set, title_date_day_set, &set_day, &print_date, &print_time, nullptr},
276 { page_date_hour_set, title_date_hour_set, &set_hour, &print_date, &print_time, nullptr},
277 { page_date_min_set, title_date_min_set, &set_min, &print_date, &print_time, nullptr},
278 { page_date_dow_set, title_date_dow_set, &set_day, &print_date, &print_time, nullptr},
279 };
Wie man sihet sind die Seitenaktionen Funktionspointer. Mit pgm_read_byte() kann ich bsp. die Page ID lesen, aber: Wieviele Byte muss if für die funktionspointer lesen? Wie groß ist ein funktionspointer im AVR? Unter x86 sind es 4 byte unter x86_64 sind es eben 8. Wieviele beim AVR?
-
Zitat:
Zitat von
schorsch_76
Wieviele beim AVR?
16 Bit, also 2 Byte. Statt den Wert fest in deinen Quellcode reinzukodieren kannst du auch sizeof(intptr_t) verwenden. intptr_t ist ein Datentyp, der garantiert einen Pointer speichern kann.
mfG
Markus
-
Ich hab das jetzt so gelöst.
Code:
// read current page description into ram
memcpy_P(&page,&pages[current],sizeof(menu_page_desc_t));
Ich brauch eh die ganze Zeile ....
-