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


