|
WinAVR и адрес статической функции, странная ошибка |
|
|
|
Jun 6 2011, 09:45
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Код static basis sum(uint8_t arg_cnt, void **args){ basis result = 0; for(;arg_cnt--;*args++){ result += evalute(args); } return result; }
#define num(x) ((x) & 0xFF), (((x) >> 8) & 0xFF), (((x) >> 16UL) & 0xFF), (((x) >> 24UL) & 0xFF)
#define adr(x) ((uint16_t)(x) & 0xFF), ((uint16_t)(x) & 0xFF00) >> 8 uint8_t massiv[] = { TOC_VAR, 0, TOC_FUNC,adr(sum), 0, 3, TOC_NUMBER, num(99UL), TOC_NUMBER, num(1UL), TOC_VAR, 0, TOC_END }; не получается занести в массив адрес функции  пишет - не константа  с чего бы это вдруг?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
 |
Ответов
|
Jun 10 2011, 10:55
|
Участник

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335

|
ну таки я об этом и говорю - тут на этапе формирования массива автор пытается пользовать данные ,которых еще нет . Если просто класть указатель на функцию - да , ld автоматом подсунет нужный адрес , но автор-то хочет вычеслений ... И как быть бедному gcc ?
|
|
|
|
|
Jun 10 2011, 13:47
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Jun 10 2011, 18:22)  Почему у gcc для других платформ с этим проблем не возникает? У gcc с указателями иногда очень странные отношения. Вот пример: Код struct rec1 { int field1; int field2; };
#define prec1 ((rec1 *) 0x10000)
static const int field2addr = (uint32_t)&prec1->field2; // строка 1
class testcase2 { static const int field2addr = (uint32_t)&prec1->field2; // строка 2 }; Строку 1 - проглатывает, а строку 2 - нет: Цитата tests.cpp:64:43: error: a cast to a type other than an integral or enumeration type cannot appear in a constant-expression tests.cpp:64:50: error: '->' cannot appear in a constant-expression tests.cpp:64:50: error: '&' cannot appear in a constant-expression Почему так - не понимаю...
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
ARV WinAVR и адрес статической функции Jun 6 2011, 09:45 Сергей Борщ QUOTE (ARV @ Jun 6 2011, 12:45) пишет - н... Jun 6 2011, 13:08 ARV Цитата(Сергей Борщ @ Jun 6 2011, 17:08) В... Jun 6 2011, 19:17 zltigo static убрать Jun 6 2011, 20:14 ARV Цитата(zltigo @ Jun 7 2011, 00:14) static... Jun 7 2011, 04:34 Сергей Борщ CODEstatic void test()
{
}
#define adr... Jun 7 2011, 06:48 ARV Цитата(Сергей Борщ @ Jun 7 2011, 10:48) Т... Jun 7 2011, 09:33  demiurg_spb Кодstatic void foo1(void){}
static void fo... Jun 7 2011, 10:12  Сергей Борщ QUOTE (ARV @ Jun 7 2011, 12:33) и где иск... Jun 7 2011, 10:19   demiurg_spb Цитата(Сергей Борщ @ Jun 7 2011, 14:19) Б... Jun 7 2011, 10:26 ARV Кодstatic void foo(void){
}
static uint8_... Jun 7 2011, 11:01 Сергей Борщ QUOTE (ARV @ Jun 7 2011, 14:01) не проход... Jun 7 2011, 11:40  ARV Цитата(Сергей Борщ @ Jun 7 2011, 15:40) К... Jun 7 2011, 12:15   Сергей Борщ QUOTE (ARV @ Jun 7 2011, 15:15) совершенн... Jun 7 2011, 14:35 Maddy Хм ... а можно дурацкий вопрос ? откуда компилятор... Jun 10 2011, 07:38 Сергей Борщ QUOTE (Maddy @ Jun 10 2011, 10:38) Хм ...... Jun 10 2011, 08:59   alx2 Цитата(AHTOXA @ Jun 10 2011, 18:47) У gcc... Jun 14 2011, 05:08    AHTOXA Статические int-ы легко инициализируются таким обр... Jun 14 2011, 06:05     alx2 Цитата(AHTOXA @ Jun 14 2011, 11:05) Стати... Jun 14 2011, 11:17      AHTOXA Цитата(alx2 @ Jun 14 2011, 17:17) Нашел с... Jun 14 2011, 12:42       alx2 Цитата(AHTOXA @ Jun 14 2011, 17:42) Языка... Jun 15 2011, 04:59        AHTOXA Цитата(alx2 @ Jun 15 2011, 10:59) в строк... Jun 15 2011, 05:11         alx2 Цитата(AHTOXA @ Jun 15 2011, 10:11) Можно... Jun 15 2011, 09:14          AHTOXA Цитата(alx2 @ Jun 15 2011, 15:14) Конечно... Jun 15 2011, 09:47           dxp Цитата(AHTOXA @ Jun 15 2011, 16:47) На мо... Jun 15 2011, 10:28 Maddy Хм ...
Кодlong handleTimersISR(void);
sta... Jun 10 2011, 13:21 Maddy мдя послали А кстати - вариант с offsetof не под... Jun 10 2011, 14:06 AHTOXA Через него и выкрутился:
Код static const int fiel... Jun 10 2011, 15:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|