реклама на сайте
подробности

 
 
> typeinfo + IAR v.5.11B, Как пользоваться?
alux
сообщение Jun 18 2008, 08:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Редактирование переменных типа double реализовал при помощи виртуальных функций. Какую именно переменную редактировать указывается при помощи указателя pValue, в которую передается адрес переменной :
Код
volatile double* pValue;            // Указатель на редактируемый параметр
volatile double __eeprom* pValueEE; // Указатель на редактируемый параметр в EEPROM
volatile double* param[] = {&area, &Kt, &Y0};
volatile double __eeprom* paramEE[] = {&ee_area, &ee_Kt, &ee_Y0};
..................
class TEditValue
{
public:
  void Up()       // k_right
  {

       if(pValue-- == *param) pValue = *(param+2);
       if(pValueEE-- == *paramEE) pValueEE = *(paramEE+2);
       ......................................... // какие-то действия при нажатии кнопки UP
       ftoa(*pValue, lcd_buf, 3, 0);
  }
  
  void Down()     // k_left
  {
      .................
  }
  
  void Right()    // k_enter
  {
     *pValue = round_to_pow(atof(lcd_buf), -3);  // округлить до 3 знака после запятой
     *pValueEE = *pValue;       // сохранить отредактированную переменную в EEPROM
  }
  
  void Numeric()  // 0...9
  {
          ..............
   }
};

// Функция, вызываемая при входе в пункт меню
void Level1Item1Sub1sub1_Func(void)
{
  TCritSect cs;
  
  pValue = *param;        // &area;
  pValueEE = *paramEE;    // &ee_area;
.............
}
Это все работает. Но теперь возникла необходимость реализовать почти те же действия для переменных типа unsigned char. Первое, что пришло на ум, использовать указатель void* pValue. Когда необходимо редактировать переменную типа unsigned char (при входе в соответствующий пункт меню), то указатель приводится к типу (unsigned char*).
Но возникает вопрос, как привести к конкретному типу указатель pValue в реализации виртуальной функции? Т.е. определение типа происходит в runtime. В C++ есть механизм динамического определения типа во время выполнения программы при помощи операции typeid и класса type_info. В IAR v.5.11B есть даже соответствующий заголовочный файл <typeinfo>. Но при использовании ее компилятор выдает ошибки

Error[Pe878]: Embedded C++ does not support run-time type information C:\Program Files\IAR Systems\Embedded Workbench 5.0\avr\INC\DLIB\typeinfo 62
Error[Pe020]: identifier "typeid" is undefined D:\Sasha\MyWork\IAR projects\device\include\tasks.h 351

Для чего нужен этот файл, если нельзя им пользоваться? И как мне решить проблему с редактированием разных типов переменных посредством одного указателя?

PS. Создание второго класса для редактирования переменных unsigned char типа не предлагать.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   typeinfo + IAR v.5.11B   Jun 18 2008, 08:33
- - KRS   typeid же только на классы с виртуальными функциям...   Jun 18 2008, 08:48
|- - alux   Цитата(KRS @ Jun 18 2008, 11:48) typeid ж...   Jun 18 2008, 09:00
- - KRS   ЦитатаСледует помнить, что RTTI в собственном смыс...   Jun 18 2008, 09:44
- - alux   Понятно. Значит typeid мне не подходит. Тогда все ...   Jun 18 2008, 12:39
- - KRS   операции с указателями void* запрещены, потому что...   Jun 18 2008, 12:58
|- - alux   Цитата(KRS @ Jun 18 2008, 15:58) можно на...   Jun 18 2008, 13:08
|- - KRS   Цитата(alux @ Jun 18 2008, 17:08) Та же о...   Jun 18 2008, 13:22
- - alux   Получается, врут учебники: ЦитатаДля указателя на ...   Jun 18 2008, 13:48
|- - Сергей Борщ   Цитата(alux @ Jun 18 2008, 16:48) Получае...   Jun 18 2008, 14:19
|- - alux   Цитата(Сергей Борщ @ Jun 18 2008, 17:19) ...   Jun 18 2008, 14:44
|- - Сергей Борщ   Цитата(alux @ Jun 18 2008, 17:44) Если бы...   Jun 18 2008, 21:21
||- - alux   Цитата(Сергей Борщ @ Jun 19 2008, 00:21) ...   Jun 19 2008, 06:39
|- - IgorKossak   Цитата(alux @ Jun 18 2008, 17:44) ...Да и...   Jun 19 2008, 04:58
- - alux   Прошу помощь зала С редактированием и сохранение...   Jun 19 2008, 13:38
- - Сергей Борщ   Цитата(alux @ Jun 19 2008, 16:38) Как так...   Jun 20 2008, 13:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01347 секунд с 7
ELECTRONIX ©2004-2016