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

 
 
 
Reply to this topicStart new topic
> msp430-gcc говорит:, unsupported relocation error...
Alex2172
сообщение Jun 16 2005, 11:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



что за ошибка такая
Warning: internal error: unsupported relocation error

Привожу абстрактный пример
определена структура
typedef MyStruct{
int16_t foo1;
int8_t foo2;
} MyStruct;

есть экземпляр
MyStructure structure;

есть указатель на него
MyStructure * pMyStructure = &structure;

structure->foo1 = (int16_t) 0;//здесь то и вылазит эта ошибка

Есть подозрение в корявом размещении структуры в памяти из-за 16 битной архитектуры, т.к. ошибка пропадает если изменить содержание MyStruct
Буду признателен за любой совет.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 16 2005, 12:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alex2172 @ Jun 16 2005, 17:21)
Привожу абстрактный пример
определена структура
typedef MyStruct{
  int16_t  foo1;
  int8_t    foo2;
} MyStruct;
*


Определение типа в вашем случае должно выглядеть так
Код
typedef struct {
 int16_t  foo1;
 int8_t    foo2;
} MyStruct;

Вы ошиблись в определении структуры.
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Jun 16 2005, 12:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



В продолжении темы добавлю что структура на самом деле упакована, т.е.

typedef struct {
int16_t foo1;
int8_t foo2;
int16_t foo3;
} __attribute__ ((packed)) MyStructure;

тогда если
MyStructure structure;
MyStructure * pMyStructure = &structure;

pMyStructure->foo3 = (int16_t) 0;

генерит что-то типа

mov #llo(0), &structure+3
- вот это ему и не нравиться.
Go to the top of the page
 
+Quote Post
kilgor
сообщение Jun 17 2005, 05:27
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 38
Регистрация: 3-06-05
Пользователь №: 5 699



Цитата(Alex2172 @ Jun 16 2005, 14:21)
что за ошибка такая
Warning: internal error: unsupported relocation error

Привожу абстрактный пример
определена структура
typedef MyStruct{
  int16_t  foo1;
  int8_t    foo2;
} MyStruct;

есть экземпляр
MyStructure structure;

есть указатель на него
MyStructure * pMyStructure = &structure;

structure->foo1 = (int16_t) 0;//здесь то и вылазит эта ошибка

Есть подозрение в корявом размещении структуры в памяти из-за 16 битной архитектуры, т.к. ошибка пропадает  если изменить содержание MyStruct
Буду признателен за любой совет.
*


Может проблема с выравниванием на границу нечетного байта? И при попытке
доступа к слову не выравненному на границу происходит беда. Может надо придумать как увеличить sizeof вашей структуры до 4 байт, добавив пустой байт, smile.gif.
Go to the top of the page
 
+Quote Post
Alex2172
сообщение Jun 17 2005, 11:55
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537



Цитата(kilgor @ Jun 17 2005, 08:27)
Может проблема с выравниванием на границу нечетного байта? И при попытке
доступа к слову не выравненному на границу происходит беда. Может надо придумать как увеличить sizeof вашей структуры до 4 байт, добавив пустой байт, smile.gif.
*

Да, конечно, что и написано в даташите. Это-то и огорчает.
Go to the top of the page
 
+Quote Post

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

 


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


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