реклама на сайте
подробности

 
 
> Проблема перехода с CVAVR 1.24.7e на CVAVR 1.25.3
Stepanich
сообщение Sep 20 2007, 18:27
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 8-06-05
Из: Москва
Пользователь №: 5 847



Здравствуйте.

Возникла следующая проблема.
Некий проект делался на компиляторе 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, и, наоборот, перед присвоением значения адреса указателя значению переменной — выполнять соответствующее преобразование. Эти действия сильно загромождают исходный код программы, так как обращений к указателю в программе несколько десятков.
Можно ли обойти это ограничение в данной версии?

Спасибо, всего хорошего.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
werner
сообщение Sep 21 2007, 08:56
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 30-06-07
Пользователь №: 28 811



Здравствуйте!

Цитата(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;

у меня компилятор не ругается.
---
С уважением.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016