Если непонятно описание то скажу "попроще":
первый параметр - массив куда читать, ноходящийся в ОЗУ.
второй параметр - массив откуда читать, находящийся в еепром.
третий параметр - сколько байт читать.
Код: Выделить всё
char mas[13];
EEMEM char mas_eeprom[13] = {...};
eeprom_read_block(mas, mas_eeprom, 13);
Код: Выделить всё
for (int8_t i=otr_spis;i<otr_spis_1;i++)
{
unsigned char buffer1[40];
uint32_t t[13];
eeprom_read_block(t,t_og_r,sizeof(t));
utoa(t[i], buffer1, 10);
LcdStr(FONT_1X,buffer1);
}
твердо утверждать не стану, на там вроде такого нетWiseLord писал(а):А что в прогах видел - возможно, там было что-то вроде #define bool char
Код: Выделить всё
const void(*mnu_func_ptr[11])() ={ // menu functions pointer
&menu_main, &menu_time, &menu_date, ... };Код: Выделить всё
(mnu_func_ptr[device_sm-DEV_STA_MNU_MAIN])(); // indirect callКод: Выделить всё
__flash uint16_t func_adress[]={ &menu_main, &menu_date, ... } Код: Выделить всё
typedef void (*menu_finc_ptr)(void); // определили тип днных "указатель на функцию"
flash menu_func_ptr func_array[] = {func1, func2, func3, ...}; // определили массив во flash этих самых указателейА для чего все эти извращения-приведения ? Почему сразу не сделать массив указателей ?Просто я не могу понять, как привести тип функции void к константному значению, понятному для flash uint16_t
Я имел ввиду тип массива - указатель на функцию (void (*ptr)(void)), а не целое (uint16_t). Для чего все эти лишние приведения типовuk8amk писал(а):Указатель - есть по сути переменная.
у меня вызывало ошибку Storage modifier not allowed in this context.flash void(*mnu_func_ptr[11])(void) ={ // menu functions pointer
menu_main,
menu_time,
menu_date,
Код: Выделить всё
flash uint8_t str_time[] ="ВРЕМЯ";
flash uint8_t str_date[] ="ДАТА";
и т.д.Код: Выделить всё
flash uint8_t *mnu_main_str_ptr[]={ str_time, str_date, ...Код: Выделить всё
flash uint16_t mnu_ptr[] = { // массив адресов строк меню во флеш
(uint16_t) &str_time, // вычисление адреса строки и приведение к 16-бит
(uint16_t) &str_date,
... };Код: Выделить всё
copymem_load_fstr( (flash uint8_t*)mnu_ptr[mnu_item_index], str_buf_RAM ); //загрузить flash строку в RAMКод: Выделить всё
copymem_load_fstr( flash uint8_t *str, uint8_t *dest ); // *источник flash, *буфер RAM