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

 
 
 
Reply to this topicStart new topic
> адрес Массива в массиве, Не могу указать :(
andrvisht
сообщение Feb 23 2006, 07:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Всех отмечающих с праздником !
никак не могу заставить компилятор сделать следущее:
пусть имеется массив во Flash
Код
__flash char Alph[24] = {'a','b','c','d','e','f','g','h','k', ...};
и другой массив во Flash
__flash char Param[] = {0x45,0x12,0x34,(char)Alpha,(char)(Alpha>>8), ...};

как видно мне нужно впихнуть в длинный список параметров массива Param адрес массива Alpha.
по логике все вроде как-бы должно работать, а по сути IAR выдает такое сообщение
Error[Pe031]: expression must have integral
причем ругается он на 5 элемент где сделано
Код
(char)(Alpha>>8)

Все попытки манипуляции с этой строкой приводят к разного рода сообщениям и одному, ошибочному, результату.
Ну и собственно вопрос Как ?
Go to the top of the page
 
+Quote Post
Laptop
сообщение Feb 23 2006, 08:12
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



Может сперва явно привести к инту, а потом уже сдвигать и приводить к чару? Компилятора под рукой нет чтобы проверить...
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Feb 23 2006, 08:28
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(Laptop @ Feb 23 2006, 12:12) *
Может сперва явно привести к инту, а потом уже сдвигать и приводить к чару? Компилятора под рукой нет чтобы проверить...

пробовал, все равно ругается. sad.gif такое ощущение что он не считает имя массива за константу и соответственно не может проинициализировать ей постоянные данные коими является flash. Но ведь имя массива константа ..... ?
Go to the top of the page
 
+Quote Post
vet
сообщение Feb 23 2006, 09:15
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Должно работать явное указание адреса переменной, без каких-либо операций над ним; массив, конечно, придётся заменить на структуру.
Пример на CodeVision:
Код
typedef flash struct struct_menu_item {
  void (*fn)();
  flash struct struct_menu_item *link[2];
} TMenuItem;


extern flash TMenuItem mnMain;
extern flash TMenuItem mnLabel;
extern flash TMenuItem mnStat;
...

void fnMain() {
...
}

void fnLabel() {
...
}

flash TMenuItem mnMain         = {fnMain,          {&mnStat,    &mnLabel       }};
flash TMenuItem mnLabel        = {fnLabel,         {&mnStat,    &mnLogo        }};
...


Сообщение отредактировал vet - Feb 23 2006, 09:56


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Feb 23 2006, 10:09
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(vet @ Feb 23 2006, 13:15) *
Должно работать явное указание адреса переменной, без каких-либо операций над ним; массив, конечно, придётся заменить на структуру.

Спасибо за пример, но тут дело принципа... как это обойти мысли были, либо структуры как Вы предлагаете, либо хранение на массива а индекса массива указателей в котором проинициализированы данные массивы. (их просто много)

Меня собственно интересует возможность именно такого подхода, или это невозможно ?
Go to the top of the page
 
+Quote Post
_artem_
сообщение Feb 23 2006, 11:39
Сообщение #6


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



По момему он должен ругаться и на четвертый элемент но сообшает 5-ый.
Попробуйте явно задать адрес массива во флеше Alph с помошью pragma. Инициализация требует константу но сам адрес Alph во флеше определяется во время линкования . Если это не поможет - запишите в инициализацию Param явное значение адреса заданного с помошью pragma.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
andrvisht
сообщение Feb 23 2006, 12:40
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(_artem_ @ Feb 23 2006, 15:39) *
По момему он должен ругаться и на четвертый элемент но сообшает 5-ый.
Попробуйте явно задать адрес массива во флеше Alph с помошью pragma. Инициализация требует константу но сам адрес Alph во флеше определяется во время линкования . Если это не поможет - запишите в инициализацию Param явное значение адреса заданного с помошью pragma.

явное значение работает, но мене такой подход не нравится sad.gif прото массивов много, и каждому адрес задавать как-то sad.gif((
а можно подробнее как
> задать адрес массива во флеше Alph с помошью pragma
???
Go to the top of the page
 
+Quote Post
_artem_
сообщение Feb 23 2006, 20:53
Сообщение #8


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



#pragma location=xxxx

Posmotri v IAR compiler reference page 220


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
andrvisht
сообщение Feb 24 2006, 07:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(_artem_ @ Feb 24 2006, 00:53) *
#pragma location=xxxx

Posmotri v IAR compiler reference page 220

понял, но это тоже что указать @ 0x0130 например, опять-же указание контанты sad.gif(((
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 24 2006, 07:32
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(&-rey @ Feb 23 2006, 12:09) *
Меня собственно интересует возможность именно такого подхода, или это невозможно ?

Невозможно. Препроцессор не знает адреса массива (и не может выполнять
операций с тем, чего нет) - он будет известен только при линковке. Линкер знает адрес,
но ничего не знает о том, что Вы хотели-бы перед подстановкой его сдвинуть (эта информация
умерла в препроцессоре).


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Feb 24 2006, 07:50
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(zltigo @ Feb 24 2006, 11:32) *
Цитата(&-rey @ Feb 23 2006, 12:09) *

Меня собственно интересует возможность именно такого подхода, или это невозможно ?

Невозможно. Препроцессор не знает адреса массива (и не может выполнять
операций с тем, чего нет) - он будет известен только при линковке. Линкер знает адрес,
но ничего не знает о том, что Вы хотели-бы перед подстановкой его сдвинуть (эта информация
умерла в препроцессоре).

Понял, Спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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