|
Помогите новичку с указателями |
|
|
|
Mar 25 2008, 07:32
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Добрый день! Хочу сделать меню для ЖКИ 8*2 с использованием указателей. Раньше плевался на них и не хотел использовать, но вот вижу, что очень удобно их использовать если знать как. Ниже предстален кусок кода - в структурах хранятся адреса строк, которые нужно вывести, компилятор (ИАР) выдает ошибку: Error[Pe028]: expression must have a constant value напротив всех элементов структуры. Мне бы хотелось в структкрах писать и указатели на адреса строк, которые во флеше, и указатели на функции, чтобы можно было вывести целые числа, возможно указатели на строки хранящиеся в ОЗУ. Все эти структуры я запихиваю в массив и потом по обращению к элементам массива могу вывожить данные на ЖКИ. Может быть где-то некорректно выразился - простите, я пока в этих делах не очень
__flash byte *const s0=" MASTER "; __flash byte *const s1=" v-0.1a "; __flash byte *const s2=" Журнал "; __flash byte *const s3=" работы "; __flash byte *const s4="Конфиг. "; __flash byte *const s5="системы "; __flash byte *const s6=" Ручной "; __flash byte *const s7=" режим "; __flash byte *const s8="Текущие "; __flash byte *const s9="настр-ки";
int *pperem;
/*Структуры всех пунктов меню*/ struct MENU{ byte *st1; byte *st2; //__flash byte *next; }mas[]={ s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, pperem, pperem, };
void Hardwareinit (void) {
struct MENU ku; ku=mas[1]; //элемент массива - адрес структуры Out_LCD(1,1, (ku.st1)); Out_LCD(2,1, (ku.st2)); }
|
|
|
|
|
 |
Ответов
|
Mar 25 2008, 16:22
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Небольшой примерчик. CODE typedef char const __flash *PFLASH_STR; typedef char *PRAM_STR; typedef void (*PCALLBACK)(void);
typedef struct tagMENU_ITEM { PFLASH_STR pFlashStr; PRAM_STR pRamStr; PCALLBACK cb; } TMENU_ITEM, *PMENU_ITEM;
const __flash char fl_str0[] = "hello fl0"; const __flash char fl_str1[] = "hello fl1"; const __flash char fl_str2[] = "hello fl2";
char ram_str0[] = "hello ram";
void my_func(void) { }
void my_func2(void) { }
void my_func3(void) { }
TMENU_ITEM menuitems[] = { { NULL, NULL, my_func }, { fl_str0, NULL, NULL }, { fl_str1, NULL, NULL }, { fl_str2, NULL, my_func2 }, { NULL, ram_str0, my_func3 } };
#define COUNT(some_array) ( sizeof(some_array)/sizeof(some_array[0]) )
void flash_print( PFLASH_STR str ) { char buf[ 32 ]; char *dst = buf; while(*str) *dst++ = *str++; *dst = 0; printf("%s", buf); }
void MenuTest(void) { int i; PMENU_ITEM pItem;
for (i = 0; i < COUNT( menuitems ); i++) { pItem = &menuitems[ i ];
if (pItem->pFlashStr) flash_print( pItem->pFlashStr ); if (pItem->pRamStr) printf("%s", pItem->pRamStr); if (pItem->cb != NULL) pItem->cb(); // Запуск функции обработки } }
|
|
|
|
Сообщений в этой теме
masterpc Помогите новичку с указателями Mar 25 2008, 07:32 KRS А вы определите так
Код__flash const byte s0[... Mar 25 2008, 07:40 masterpc Цитата(KRS @ Mar 25 2008, 09:40) А вы опр... Mar 25 2008, 07:48  Сергей Борщ Цитата(masterpc @ Mar 25 2008, 09:48) Опр... Mar 25 2008, 08:16   masterpc Цитата(Сергей Борщ @ Mar 25 2008, 10:16) ... Mar 25 2008, 08:36    Сергей Борщ Цитата(masterpc @ Mar 25 2008, 10:36) Пер... Mar 25 2008, 09:06     masterpc Цитата(Сергей Борщ @ Mar 25 2008, 11:06) ... Mar 25 2008, 09:35      Сергей Борщ Цитата(masterpc @ Mar 25 2008, 11:35) Не ... Mar 25 2008, 11:12       masterpc Цитата(Сергей Борщ @ Mar 25 2008, 13:12) ... Mar 25 2008, 11:28        sKWO Цитата(masterpc @ Mar 25 2008, 15:28) Нуж... Mar 25 2008, 13:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|