Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.06.2012, 10:12
|
#1
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Работа с указателями
Код:
|
unsigned char *p;
void main (void)
{
for(p = 0x25; p ‹ 0x30; p++)
{
*p = 0xAA;
}
while(1)
{
}
} |
Ошибка при компилировании operands of "‹" not same type
Подскажите плиз, что не так
|
|
|
Сказали "Спасибо" Fair88Play
|
|
|
18.06.2012, 10:42
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
вообще то, для указателей операции сравнений не определены, надо изменить сам алгоритм итерации.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
18.06.2012, 10:53
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
Или попробуйте сделать так:
Цитата:
|
unsigned char *p, *max;
max = p+n;
void main (void)
{
for(p = 0x25; p ‹ max; p++)
{
*p = 0xAA;
}
while(1)
{
}
}
|
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
18.06.2012, 10:55
|
#4
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Работа с указателями
max = p+n;
а n чему равно?
|
|
|
Сказали "Спасибо" Fair88Play
|
|
|
18.06.2012, 10:57
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Работа с указателями
Сообщение от Fair88Play
|
operands of "‹" not same type
|
Операнды разного типа, поэтому их нужно привести к типу указателя.
Код:
|
unsigned char *p;
void main (void)
{
for(p = (unsigned char *)0x25; p ‹ (unsigned char *)0x30; p++)
{
*p = 0xAA;
}
while(1)
{
}
} |
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
18.06.2012, 10:59
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,337
Сказал спасибо: 85
Сказали Спасибо 602 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
Как-то так ( byte определил, т.к. лениво писать unsigned char) :
Код:
|
typedef unsigned char byte;
byte *p;
void main (void)
{
//на всякий случай p=0, т.к. неизвестна разрядность Ваших указателей,
//чтоб старшие байты, если есть, стали нулевыми
p=0;
for((byte)p = 0x25; (byte)p ‹ 0x30; p++)
{
*p = 0xAA;
}
while(1)
{
}
} |
|
|
|
Сказали "Спасибо" pambaru
|
|
|
18.06.2012, 11:03
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,337
Сказал спасибо: 85
Сказали Спасибо 602 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
Либо наоборот:
Код:
|
typedef unsigned char byte;
byte p;
void main (void)
{
for(p = 0x25; p ‹ 0x30; p++)
{
*((byte*)p) = 0xAA;
}
while(1)
{
}
} |
|
|
|
Сказали "Спасибо" pambaru
|
|
|
18.06.2012, 11:39
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
pambaru, чем же Ваш первый вариант отличается от варианта ТС, второй вариант вообще ошибочен.
Сообщение от Fair88Play
|
max = p+n;
а n чему равно?
|
n=0х30-0х25, а вообще, вариант из #5 более правильный, почему то, мне казалось, что приведение возможно только переменных.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
18.06.2012, 12:08
|
#9
|
Временная регистрация
Регистрация: 28.05.2012
Сообщений: 51
Сказал спасибо: 0
Сказали Спасибо 32 раз(а) в 32 сообщении(ях)
|
Re: Работа с указателями
Большое спасибо за ответы, проблема решилась!
|
|
|
Сказали "Спасибо" Fair88Play
|
|
|
18.06.2012, 12:20
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,337
Сказал спасибо: 85
Сказали Спасибо 602 раз(а) в 365 сообщении(ях)
|
Re: Работа с указателями
Цитата:
|
pambaru, чем же Ваш первый вариант отличается от варианта ТС
|
Приведением указателя к типу byte.
В CodevisionAVR не компилится первый вариант, а Keil uVision ARM все ок (только варнинги на счет размере переменной, но об этом позаботилось p=0; )
Цитата:
|
второй вариант вообще ошибочен.
|
На мой взгляд все ок.
Компилится и в CodevisionAVR и в Keil uVision ARM.
Вообще подобные конструкции я частенько применяю.
Пример:
#define rpuLanData (*(volatile byte*)(ChipParAddr+6))
|
|
|
Сказали "Спасибо" pambaru
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Напряжённая работа
|
Roshens |
Отвлекитесь, эмбеддеры! |
8 |
01.09.2010 23:08 |
Работа в Proteus
|
Alena_1986 |
Микроконтроллеры, АЦП, память и т.д |
7 |
22.05.2009 18:25 |
Часовой пояс GMT +4, время: 23:16.
|
|