Compilerfehler bei Anwendung eines LVGL-Beispiels

Hallo zusammen,

ich arbeite mit der Arduino IDE 2.3.5 und der LVGL-Version 8.4.0.

Das Widget Roller (lv_roller) habe ich schon oft verwendet. Wenn ich aber den Beispielcode für eine spezielle Ausführung aus der LVGL-Doku einsetze erhalte ich folgende Fehlermeldung:
"Compilation error: invalid conversion from 'void*' to 'lv_draw_mask_fade_param_t*' [-fpermissive]"

In dieser Codesequenz tritt der Fehler in den Zeilen 28, 35, 41 und 42 auf:

  1  void mask_event_cb(lv_event_t * e) {
  2    lv_event_code_t code = lv_event_get_code(e);
  3    lv_obj_t * obj = lv_event_get_target(e);
  4
  5    static int16_t mask_top_id = -1;
  6    static int16_t mask_bottom_id = -1;
  7
  8    // Deckt das Objekt einen Bereich vollständig ab?
  9    if(code == LV_EVENT_COVER_CHECK) {
 10      lv_event_set_cover_res(e, LV_COVER_RES_MASKED);
 11    }
 12    // Beginn der Hauptzeichnungsphase
 13    else if(code == LV_EVENT_DRAW_MAIN_BEGIN) {
 14      // add mask 
 15      const lv_font_t * font = lv_obj_get_style_text_font(obj, LV_PART_MAIN);
 16      lv_coord_t line_space = lv_obj_get_style_text_line_space(obj, LV_PART_MAIN);
 17      lv_coord_t font_h = lv_font_get_line_height(font);
 18
 19      lv_area_t roller_coords;
 20      lv_obj_get_coords(obj, &roller_coords);
 21 
 22      lv_area_t rect_area;
 23      rect_area.x1 = roller_coords.x1;
 24      rect_area.x2 = roller_coords.x2;
 25      rect_area.y1 = roller_coords.y1;
 26      rect_area.y2 = roller_coords.y1 + (lv_obj_get_height(obj) - font_h - line_space) / 2;
 27
 28      lv_draw_mask_fade_param_t* fade_mask_top = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
 29      lv_draw_mask_fade_init(fade_mask_top, &rect_area, LV_OPA_TRANSP, rect_area.y1, LV_OPA_COVER, rect_area.y2);
 30      mask_top_id = lv_draw_mask_add(fade_mask_top, NULL);
 31
 32      rect_area.y1 = rect_area.y2 + font_h + line_space - 1;
 33      rect_area.y2 = roller_coords.y2;
 34
 35      lv_draw_mask_fade_param_t* fade_mask_bottom = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
 36      lv_draw_mask_fade_init(fade_mask_bottom, &rect_area, LV_OPA_COVER, rect_area.y1, LV_OPA_TRANSP, rect_area.y2);
 37      mask_bottom_id = lv_draw_mask_add(fade_mask_bottom, NULL);
 38    }
 39   // Abschluss der Nachziehphase
 40   else if(code == LV_EVENT_DRAW_POST_END) {
 41     lv_draw_mask_fade_param_t* fade_mask_top = lv_draw_mask_remove_id(mask_top_id);
 42     lv_draw_mask_fade_param_t* fade_mask_bottom = lv_draw_mask_remove_id(mask_bottom_id);
 43     lv_draw_mask_free_param(fade_mask_top);
 44     lv_draw_mask_free_param(fade_mask_bottom);
 45     lv_mem_buf_release(fade_mask_top);
 46     lv_mem_buf_release(fade_mask_bottom);
 47     mask_top_id = -1;
 48     mask_bottom_id = -1;
 49   }
 50  }    

Was läuft hier falsch? Wie kann ich den Fehler umgehen?

Ich habe Ihr Thema aus einer englischsprachigen Kategorie in die Kategorie International > Deutsch des Forums verschoben .

Bitte posten Sie zukünftig jeweils in der Kategorie, die der von Ihnen verwendeten Sprache entspricht. Dies ist ein wesentlicher Teil des verantwortungsvollen Umgangs im Forum, wie es auch in der Anleitung "Wie man dieses Forum benutzt" erläutert wird. Diese Anleitung beinhaltet viele weitere nützliche Informationen. Bitte unbedingt lesen!

Vielen Dank im Voraus für Ihre Mitarbeit!

lv_mem_buf_get() wurde scheinbar 2022 entfernt. Welche Version hast du von LVGL?

Ich würde mal vermuten das die Compiler mit der Zeit wählerischer geworden sind.
Versuch mal die Rückgabe von lv_mem_buf_get() in den Datentyp der Variable zu casten:

lv_draw_mask_fade_param_t* fade_mask_top = (lv_draw_mask_fade_param_t*) lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));

Hallo Rintin,

dein Tip war goldrichtig. Der Compiler ist tatsächlich wählerischer geworden. Besten Dank.

Sorry, hatte ich übersehen, bin halt noch neu hier. Besten Dank.