Перейти к содержанию
    

DSP StarCore

Privet.

 

U kogo nibud' est opit raboti s compilyatorom Metroverks dlya StarCore ?

U menya problemi so structurami.

U nix nepriyatnaya privichka kakaya bi ni bila struktura i ee soderjimoe ee address vsegda align to 4 da i razmer toje kraten 4?

primer:

struct { char a; }v;

 

sizeof v - 4 byta

da i address lyuboy peremennoy tima v vsegda align to 4!

 

Kak mojno reshit etu problemu? S compilyatorom ot GreenHeel dlya StarCore vse ok proboval. razmer 1 a adress kak poluchitsya (ne obyazatelno kraten 4).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чего нибудь типа #pragma pack() в хелпе не описано?

Попробуйте так:

#pragma pack( 1 )
typedef struct
{ float  q0;
 int    q1;
 double q2;
 char   oa;
} sss;
#pragma pack()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

est pragma "align" no tolko 4 i 8 :))) kak nazlo

po dokam v principe etogo vsego ne doljno bit i vse doljno rabotat normalno... no tut dokumenti i chto na samom dele.. rasxodyatsya

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

est pragma "align" no tolko 4 i 8 :))) kak nazlo

po dokam v principe etogo vsego ne doljno bit i vse doljno rabotat normalno... no tut dokumenti i chto na samom dele.. rasxodyatsya

То, что адрес переменной align 4 - так и должно быть с 32-битными переменными. С 16-битными - получится сделать align 2, с 8-битными - align 1. С 64-битными - align 8 будет. И, соответственно, кратен 4 размер всех структур - они-же 32-битные.

По другому, ни как, вернее как, но вручную, на ассемблере + еще собирать по кусочкам 32-битные переменные. Т.е. иначе скорости у вас не выйдет. А какие проблемы у вас с этим? В память не помещаетесь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

est pragma "align" no tolko 4 i 8 :))) kak nazlo

po dokam v principe etogo vsego ne doljno bit i vse doljno rabotat normalno... no tut dokumenti i chto na samom dele.. rasxodyatsya

То, что адрес переменной align 4 - так и должно быть с 32-битными переменными. С 16-битными - получится сделать align 2, с 8-битными - align 1. С 64-битными - align 8 будет. И, соответственно, кратен 4 размер всех структур - они-же 32-битные.

По другому, ни как, вернее как, но вручную, на ассемблере + еще собирать по кусочкам 32-битные переменные. Т.е. иначе скорости у вас не выйдет. А какие проблемы у вас с этим? В память не помещаетесь?

 

Da no u menya kak raz ne 32 bitnie peremennie, struktura soderjit pole razmerom v odin byte:

struct { char a; } z;

 

compilyator pri kompilyacii delaet razmer structuri z 4 byte i align to 4, xotya tam maksimalniy fundamentalniy tip 8 bit. no na drugix kompilyatorax vse ok skajem ot Green Hills. Zadacha takaya, ot chipa 91c111 prixodit ethernet paket kotoriy postupayet v TCP/IP stek, stek gotov... no iz za togo chto compiler delaet vse strukturi align to 4 i razmer vsex struktur kraten 4 proisxodit smeshenie poley vsex struktur... menyat realizaciyu ne ochen pravilno... ili ya chto to nedoglyadel v opciyax compilera ili je compiler ne verno rabotaet i ne sootvetstvuet ego je documentacii. <_<

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...