|
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 7 2011, 11:01
|

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

|
Код static void foo(void){ }
static uint8_t array[] = {foo}; Цитата Building file: ../plc_editor.c Invoking: AVR Compiler avr-gcc -Wall -g3 -gdwarf-2 -O0 -fpack-struct -fshort-enums -std=c99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF"plc_editor.d" -MT"plc_editor.d" -c -o"plc_editor.o" "../plc_editor.c" ../plc_editor.c: At top level: ../plc_editor.c:95: warning: initialization makes integer from pointer without a cast ../plc_editor.c:95: error: initializer element is not computable at load time ../plc_editor.c:95: error: (near initialization for 'array[0]') make: *** [plc_editor.o] Error 1 ну на счет предупреждений - бог с ними, но пишет ведь ошибку - элемент не может быть вычислен на этапе компиляции! в run-time я могу записать туда адрес любой функции, не проходит только инициализация
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Jun 7 2011, 11:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (ARV @ Jun 7 2011, 14:01)  не проходит только инициализация CODE static void foo(void){ }
typedef void (*fptr)(); fptr array[] = { foo }; Компиляция проходит. Проблема начинается при попытке занести в массив целых чисел.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 7 2011, 12:15
|

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

|
Цитата(Сергей Борщ @ Jun 7 2011, 15:40)  Компиляция проходит. Проблема начинается при попытке занести в массив целых чисел. совершенно верно! причем если массив uint16_t - то тоже пролетает на ура (с варнингами о преобразовании указателя в целое), а вот uint8_t дает ошибку... то есть это БАГ? по идее ведь батовый массив или не байтовый - какая разница для Си?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
Сообщений в этой теме
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   Сергей Борщ 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 Maddy ну таки я об этом и говорю - тут на этапе формиров... Jun 10 2011, 10:55 Сергей Борщ QUOTE (Maddy @ Jun 10 2011, 13:55) И как ... Jun 10 2011, 12:22  AHTOXA Цитата(Сергей Борщ @ Jun 10 2011, 18:22) ... Jun 10 2011, 13:47   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
|
|
|