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

 
 
> Как в Keil'е (RV) запихать структуру в ПЗУ МК?,
Lotor
сообщение Mar 11 2009, 11:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Добрый день!
Есть структура вида:
Код
struct menu_item
{    
    char*                      Name;
    struct    menu_item       *Up;
    struct    menu_item        *Right;
    struct    menu_item        *Enter;
    struct    menu_item        *Cancel;
    struct    menu_item        *Default;
    void                     (*Func)(char);
};

Её инициализация, например, такая:
Код
struct menu_item Menu[27] =
{
/*  NAME     Up                RIGHT           ENTER           CANSEL          DEFAULT       FUNC*/      
    {"    ",     &Menu [1],    &Menu [0],    &Menu [0],     &Menu [0],     &Menu [0],    DoNormal},      //- 0_Normal          
    {" Ind",    &Menu [2],    &Menu [5],    &Menu [1],     &Menu [0],     &Menu [1],    DoShow},       //- 1_Ind    
    {" brt",    &Menu[2],     &Menu [3],    &Menu [2],     &Menu [1],     &Menu [2],    DoShow},       //- 2_Brt      
    {"COLr",   &Menu[3],     &Menu [4],    &Menu [3],     &Menu [1],     &Menu [3],    DoShow},       //- 3_COLr    
    {"POIn",   &Menu[4],     &Menu [2],    &Menu [4],     &Menu [1],     &Menu [4],    DoShow},       //- 4_POIn        
    {"CALb",   &Menu[6],    &Menu [1],     &Menu [5],     &Menu [0],     &Menu [5],    DoShow},       //- 5_CALb                              
};

Указатель на структуру:
Код
struct menu_item *pMenu = &Menu[0];

Вопрос: как структуру запихать в код, а не в ram? Const куда только не ставил... В MPLAB C30 проблем таких не имел. Компилятор Keil RV ARM. Заранее спасибо.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Mar 11 2009, 12:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Lotor @ Mar 11 2009, 14:18) *
Вопрос: как структуру запихать в код, а не в ram? Const куда только не ставил...
В Keil для этого действительно используется спецификатор const:
const struct menu_item Menu[27]

P.S. Может быть проблема в том, что инициируется не все 27 структур, а только 6... Тогда можно попробовать записать так
const struct menu_item Menu[]
Go to the top of the page
 
+Quote Post
Lotor
сообщение Mar 11 2009, 13:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Палыч @ Mar 11 2009, 15:34) *
В Keil для этого действительно используется спецификатор const:
const struct menu_item Menu[27]

P.S. Может быть проблема в том, что инициируется не все 27 структур, а только 6... Тогда можно попробовать записать так
const struct menu_item Menu[]


6 строк - это я для примера привел, всё лишнее убрал, чтобы не загромождать пост. Так-то инициализируется весь массив полностью. Проблема в том, что Keil'у не нравится скорее всего указатель на этот массив. Вообщем ошибка такая:
Код
error:  #144: a value of type "const struct menu_item *" cannot be used to initialize an entity of type "struct menu_item *"
и вылезает её много и на каждую строку при инициализации массива.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 11 2009, 13:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Имхо, в описание полей структуры - указатели на struct - нужно добавить const
const struct menu_item *Up;
const struct menu_item *Right; и т.д.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Mar 11 2009, 13:45
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Палыч @ Mar 11 2009, 16:29) *
Имхо, в описание полей структуры - указатели на struct - нужно добавить const
const struct menu_item *Up;
const struct menu_item *Right; и т.д.

И это проходил. Ругается
Код
a value of type "const struct menu_item *" cannot be assigned to an entity of type "struct menu_item *"
на строчке аля
Код
if (flagn_kn0) pMenu = pMenu->Cancel;


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 11 2009, 13:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Lotor @ Mar 11 2009, 16:45) *
И это проходил. Ругается
Код
a value of type "const struct menu_item *" cannot be assigned to an entity of type "struct menu_item *"
на строчке аля
Код
if (flagn_kn0) pMenu = pMenu->Cancel;


const struct menu_item *pMenu = &Menu[0];
Go to the top of the page
 
+Quote Post
Lotor
сообщение Mar 11 2009, 14:34
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Палыч @ Mar 11 2009, 16:50) *
const struct menu_item *pMenu = &Menu[0];

Я же говорю, что куда только const не ставил)... И этот Ваш вариант пробывался - компилятор расценивает такой указатель как постоянный и ругается на присвоение ему адресов в дальнейшем...


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 11 2009, 14:41
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Lotor @ Mar 11 2009, 17:34) *
...компилятор расценивает такой указатель как постоянный и ругается на присвоение ему адресов в дальнейшем...

Не-а.
const struct menu_item *pMenu; // это указатель на const
а вот так
struct menu_item * const pMenu; // уже сам указатель = const, и указывает на структуру в ОЗУ
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 07:56
Рейтинг@Mail.ru


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