Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема перехода с CVAVR 1.24.7e на CVAVR 1.25.3
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Stepanich
Здравствуйте.

Возникла следующая проблема.
Некий проект делался на компиляторе CVAVR версии 1.24.7e. В коде программы использовался указатель на EEPROM, объявленный следующим образом:
unsigned long int eeprom *pEprom.
Обращение к этому указателю происходило, например, так:
pEprom= x, где x — переменная или константа. Ошибок компилятор не находил.

При компиляции этого же проекта в CVAVR версии 1.25.3 выдаётся стандартное Си-шное сообщение об ошибке преобразования типов (например: «a value of type ‘unsigned int’ can’t be assigned to an entry of type ‘eeprom unsigned long’»).
Приходится перед каждой операцией присвоения адреса указателю выполнять преобразование типов: (unsigned long int eeprom *)x, и, наоборот, перед присвоением значения адреса указателя значению переменной — выполнять соответствующее преобразование. Эти действия сильно загромождают исходный код программы, так как обращений к указателю в программе несколько десятков.
Можно ли обойти это ограничение в данной версии?

Спасибо, всего хорошего.
werner
Здравствуйте!

Цитата(Stepanich @ Sep 20 2007, 22:27) *
Некий проект делался на компиляторе CVAVR версии 1.24.7e. В коде программы использовался указатель на EEPROM, объявленный следующим образом:
unsigned long int eeprom *pEprom.
Обращение к этому указателю происходило, например, так:
pEprom= x, где x — переменная или константа. Ошибок компилятор не находил.


Вообще-то так нельзя. Поскольку pEprom - все-таки указатель, сиречь адрес ячейки памяти. А х - содержимое этой ячейки. Должно быть
*pEprom = x
Любой нормальный компилятор обязан ругнуться на приведенное Вами присваивание. smile.gif

Если не хотите писать длинные описания типов, то есть замечательное определение typedef, Например так

typedef unsigned long int DWORD;
typedef DWORD* ptrDWORD;

eeprom DWORD* pDW;

Кстати, на такое

DWORD dwA;

*pDW = 5L;
dwA = *pDW;

у меня компилятор не ругается.
---
С уважением.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.