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

 
 
> Что за "||warning: internal error: unsupported relocation error|", а главное - как бороться? /mspgcc/
MrYuran
сообщение Sep 22 2009, 05:21
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



В своё время решил вы..пендриться и расписал протокол обмена и вообще весь УАРТ структурами и юнионами.
Типа того:
Код
typedef union Data
{
    float fData;
    int iData;
    unsigned char ucData[4];
} __attribute__ ((packed)) Data;

/**
*   Описание пакета запроса от хоста
*/
struct stCommand
{
    unsigned char Preamble;
    unsigned char OpCode;
    Data DataField;
    unsigned char CRC;
};

union CommandBuffer
{
    struct stCommand volatile   Command;
    unsigned char volatile      Bytes[sizeof(struct stCommand)];
};

Далее объявляю
static union CommandBuffer volatile InBuffer;
static union CommandBuffer volatile TempInBuffer;

Так вот, пока я работаю только с InBuffer (заполняю в прерывании от УАРТа и разгребаю в основном цикле), всё нормально.
Далее, захотелось по приёму фрейма копировать его в TempInBuffer, с тем чтобы спокойно обрабатывать, в то время как принимаем новую команду (чтобы новые данные не затирали старые).

Вот тут и начинается.
Куда копать?

С union Data тоже забавная ситуация. Я сначала сделал
Код
typedef union Data
{
    float fData;
    int iData[2];
    unsigned char ucData[4];
} __attribute__ ((packed)) Data;

Так вот: fData - нормально работает, ucData[] - тоже, а при вызове iData[] возникает ошибка.
а вот int iData (не массив) - тоже нормально работает.

Что за чертовщина! И дёрнуло связаться с этими юнионами... Никогда не пользовался и был вполне счастлив...

PS: ошибку генерирует линкер


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Sep 22 2009, 06:33
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Нашёл вот что-то подобное
Пишут типа отключить __attribute__ ((packed)), вроде пробовал...

Ладно, будем копать... smile3046.gif

Оппа... Кажися, прокатило... laughing.gif

Таки да, прокатило!
Видимо, действительно проблем был в аттрибутах упаковки

Цитата(Сергей Борщ @ Sep 22 2009, 09:38) *
По-хорошему о ней надо писать не сюда, а в баг-трекер или в список рассылки mspgcc-users@lists.sourceforge.net

Боюсь, ниасилю...
Да и наверно, никто возиться с такой мелочью не станет, если только готовый патч приложить...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post



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

 


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


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