Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по организации меню
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 15:42:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопрос по организации меню
СообщениеДобавлено: Пт июл 07, 2017 05:28:11 
Родился

Зарегистрирован: Пт июл 07, 2017 04:46:45
Сообщений: 2
Рейтинг сообщения: 0
Здравствуйте. Что-то я совсем запутался со связанными константными структурами в Си. Ведь они должны быть определены при их инициализации, но так как они связаны между собой, компилятор начинает ругаться.

Файл Menu.c
Код:
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "Menu.h"

const char PROGMEM main_menu_text[]={0xA1, 0xBB, 0x61, 0xB3, 0xBD, 0x6F, 0x65, 0x80, 0xBC, 0x65, 0xBD, 0xC6}; //Главное меню
const char PROGMEM time_set_text[]={0x48, 0x61, 0x63, 0xBF, 0x70, 0x6F, 0xB9, 0xBA, 0x61, 0x80, 0xB3, 0x70, 0x65, 0xBC, 0x65, 0xBD, 0xB8}; //Настройка времени
const char PROGMEM bright_set_text[]={0x48, 0x61, 0x63, 0xBF, 0x70, 0x6F, 0xB9, 0xBA, 0x61, 0x80, 0xC7, 0x70, 0xBA, 0x6F, 0x63, 0xBF, 0xB8}; //Настройка яркости
   
const MenuStruct main_menu={main_menu_text,NULL,NULL,time_set,NULL};
const MenuStruct time_set={time_set_text,NULL,NULL,bright_set,main_menu};
const MenuStruct bright_set={bright_set_text,NULL,NULL,NULL,time_set};

MenuStruct* curr_menu;

Файл Menu.h
Код:
#ifndef MENU_H_
#define MENU_H_

#include <avr/pgmspace.h>

typedef struct PROGMEM
{
   const char* menu_name;
   void* const parent;
   void* const child;
   void* const next;
   void* const prev;
} MenuStruct;


void Menu_Init(void);
void Menu_LCD_FSM (void);
void Menu_KeyBoard_Handler (void);



#endif /* MENU_H_ */

Компилятор выдаёт ошибки:
- 'time_set' undeclared here (not in a function)
- 'bright_set' undeclared here (not in a function)
- initializer element is not constant
- (near initialization for 'time_set.prev')
- initializer element is not constant
- (near initialization for 'bright_set.prev')

Помогите чем сможете. Заранее спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по организации меню
СообщениеДобавлено: Пт июл 07, 2017 10:07:42 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 3
перед const MenuStruct main_menu=... вам надо объявить time_set
Примерно как то так,
Код:
extern const MenuStruct time_set;

это говорит компилятору, что time_set где-то объявлена, но дальше, ищи её.

Что бы не городить такое для каждого пункта меню, проще создать макрос(define)
У меня он выглядит так. Вам надо по убирать лишнее.
Код:
#define MAKE_MENU(Name, Next, Previous, Parent, Child,Right_m,Left_m,showfunc,ShowCursor1,ACT_LEFT,ACT_RIGHT,OK,ESC,UP,DW,Text) \
    extern menuItem Next;     \
    extern menuItem Previous; \
    extern menuItem Parent;   \
    extern menuItem Child;  \
    menuItem  Name = {(menuItem*)&Next, (menuItem*)&Previous,   \
                  (menuItem*)&Parent, (menuItem*)&Child,   \
                  (menuItem*)&Right_m,(menuItem*)&Left_m,   \
                  showfunc,ShowCursor1,               \
                  ACT_LEFT,ACT_RIGHT,                  \
                  OK,ESC,UP,DW,                     \
                  { Text }}                        \


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по организации меню
СообщениеДобавлено: Сб июл 08, 2017 08:18:07 
Родился

Зарегистрирован: Пт июл 07, 2017 04:46:45
Сообщений: 2
Рейтинг сообщения: 0
Спасибо большое, pokk. Я думал о том, что надо объявить эти структуры, но меня останавливало то, что константы должны быть определены во время объявления. Про extern не знал. Спасибо.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопрос по организации меню
СообщениеДобавлено: Сб июл 08, 2017 09:41:51 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1385
Рейтинг сообщения: 0
Главный критерий для создания меню - создание новых элементов, редактирование в одном месте. На данный момент для меня почти по всем пунктам подходит этот проект. Но за основу я взял исходный проект. Именования я взял из проекта статьи.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y