В чем причина такого странного поведения? Пробовал передавать указатель как колбек параметр, ефект тот-же.
Blackfin, компилятор, менеджер памяти
Использую VDK. Компилятор из состава Visual DSP++. В C++ boot_thr.cpp: Инициализирую некоторую структуру(static). В С либе Lib существует статический указатель типа структуры. Через функцию передаю адрес структуры, присваиваю указателю. Сразу после присваивания поля структуры и указателя на структуру совпадают, адреса равны. В Lib.с объявлен статический колбек, который вызывается из недр стандартных драйверов(uart) по прерыванию. Указатель содержит корректный адрес структуры. Получается что после вызова колбека, поля указателя на структуру и поля структуры начинают отличаться. Как будто в момент инициализации указателя произошло копирования структуры, вместо присваивания указателя. При том значение &Структура и Указатель совпадают(один и тот-же участок L1 Internal memory). Но при использования в boot_thr.cpp видим старые значения полей, а в Lib.с в колбеках новые.
В чем причина такого странного поведения? Пробовал передавать указатель как колбек параметр, ефект тот-же.
В чем причина такого странного поведения? Пробовал передавать указатель как колбек параметр, ефект тот-же.
- Реклама
Поля структур для Си и С++ выравнены по разному. Хоть структуры и начинаются с одного адреса, далее идет нехорошая штука со смещениями. Прагма не работает.
Предварительно решил отказаться от Си++.
а попробовать передавать ссылки на 1ю переменную структуры ?
А что это изменит? У меня структура в структуре, она выравнивается по 1 байту или 4м в зависимости от того си это или си++. Или он по другому начнет работать?mrFox писал(а):а попробовать передавать ссылки на 1ю переменную структуры ?
в C и C++ видимо разные настройки выравнивания/упаковки структуры
при работе с кортексами (GCC) упаковка структур: -fpack-struct
можно еще так попробовать
при работе с кортексами (GCC) упаковка структур: -fpack-struct
можно еще так попробовать
Код: Выделить всё
#ifdef __cplusplus
extern "C" {
#endif
структура
#ifdef __cplusplus
}
#endif
- Реклама
Спасибо за ответы. Проблема оказалась в похеренном файле services_types.h . После его восстановления все работает.


