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

 
 
> WinAVR и адрес статической функции, странная ошибка
ARV
сообщение Jun 6 2011, 09:45
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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
    };

не получается занести в массив адрес функции sad.gif пишет - не константа sad.gif с чего бы это вдруг?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Jun 7 2011, 11:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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 я могу записать туда адрес любой функции, не проходит только инициализация


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 7 2011, 11:40
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
ARV
сообщение Jun 7 2011, 12:15
Сообщение #4


Профессионал
*****

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



Цитата(Сергей Борщ @ Jun 7 2011, 15:40) *
Компиляция проходит. Проблема начинается при попытке занести в массив целых чисел.
совершенно верно! причем если массив uint16_t - то тоже пролетает на ура (с варнингами о преобразовании указателя в целое), а вот uint8_t дает ошибку...
то есть это БАГ? по идее ведь батовый массив или не байтовый - какая разница для Си?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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