Пишем программу для нового прибора. Коллега создает вот такие структуры:
Код
typedef struct {
REC_HEADER Header;
WORD NoPT;
WORD NoPL;
WORD NoAD;
WORD StationID;
WORD ModelID;
WORD ManufactID;
char Ident[9];
char Descript[41];
WORD StatTime;
WORD NoFR;
WORD NoRT;
WORD NoBL;
BYTE NoKY;
BYTE NoPR;
BYTE UnitsCal[7];
float Units0dB[7];
char KeyId[3][5];
char KeyDescr[3][41];
BYTE KeyGrade[3];
float Factor[3];
BYTE KeyTStamp[3][8];
float KeyNom[3];
float RPM[3];
char KeyNotes[3][241];
char PrId[12][9];
char PrDescr[12][41];
char Units[12][7];
BYTE PrGrade[12];
BYTE PrTStamp[12][8];
float PrNom[12];
float PrVal[12];
char PrNotes[12][241];
} RTN;
и вот в таком вот месте программа "виснет"
Код
void make_TA(void)
{
BYTE get_status(BYTE);
RTN train=TRAIN; // ТУТ ЗАВИСАЕТ
Увеличил размер стека и все заработало. Был 3кБ сделал 10кБ. Правда, из SCRTACHPAD пришлось перенести в L1 из-за размера.
Контроллер Blackfin BF-548.
Теперь вопросы:
1. Как вы контролируете переполнение стека?
2. Какой размер считаете оптимальным?
3. В какой памяти его лучше располагать?
4. Как реально происходит приравнивание структур? Это спрятанное от глаз memcpy? И используется ли при этом динамическое выделение памяти?
5. Мириться ли с тем, что коллега создает такие огромные структуры или надо сменить подход? Можно ли их располагать в функции или лучше глобально?