Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Error: the expression must be a modifiable lvalue

57K
16 октября 2011 года
Nosaer
18 / / 25.08.2010
Здравствуйте:
При компиляции возникает ошибка:
Error: C:\CDAVR\KRR.c(73): the expression must be a modifiable lvalue

Хотя буквально год назад компилировал вроде как этот же код, и все проходило гладко. А сейчас достал его, и не могу понять где ошибка.

Код:
#include <mega8.h>
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>

#define ADC_VREF_TYPE 0x00
#define V 5

// Инициализация LCD
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm

//Функция для работы с АЦП
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

void main(void)
{
char acpread[5];
char acptry[5];
int j;

PORTB=0x00; //скорее всего нужно настроить на вывод
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;  //Регистр управления таймером
TCNT0=0x00;  //Счетный регистр
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;  //Регистр сравнения
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;    //Регистр таймера в ассинхроном режиме
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;   //Разрешение и запрет прерываний по таймеру
UCSRA=0x00;   //Регистры управления и состояни
UCSRB=0x18;   //Регистры управления и состояни
UCSRC=0x86;   //Регистры управления и состояни
UBRRH=0x00;   //Регистры ввода-вывода
UBRRL=0x4D;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;  //Регистр управления мультиплексером
ADCSRA=0x85;  //Регистр управления АЦП

lcd_init(16); // Инициализация ЖК
while (1)
      {
      itoa(read_adc(1), acpread);
      acptry = acpread*V/1024;
      j = 0;      //цикл для вывода значения с фотодатчика
      lcd_gotoxy(0,0);
      while(j<3){
      lcd_putchar(acptry[j]);
      delay_ms(200);
      j++;
      }
      }
};
11
16 октября 2011 года
oxotnik333
2.9K / / 03.08.2007
где эта 73 строка, на которую ругается?
57K
16 октября 2011 года
Nosaer
18 / / 25.08.2010
Извините, привык что строки в теге <code></code> номируются.
 
Код:
acptry = acpread*V/1024;
260
16 октября 2011 года
Ramon
1.1K / / 16.08.2003
Чисто для антереса, а что вы пытаетесь делать в той самой строчке?
41K
17 октября 2011 года
kisssko
108 / / 28.10.2010
Цитата: Nosaer
Извините, привык что строки в теге <code></code> номируются.
 
Код:
acptry = acpread*V/1024;



Ну так естественно, что будет ошибка. Нельзя менять массивный указатель - он константен.
Можно создать отдельный указатель типа char*, и скопировать туда адрес.
Вообще, массивы, объявленные как type array[]; физически указателя не содержат.
Просто компилятор подставляет адрес первого элемента массива на стадии компиляции,
если имя массива без индекса используется в выражениях.

41K
17 октября 2011 года
kisssko
108 / / 28.10.2010
Цитата: Ramon
Чисто для антереса, а что вы пытаетесь делать в той самой строчке?



Есть подозрение, что совсем не то, что было задумано. :)

57K
18 октября 2011 года
Nosaer
18 / / 25.08.2010
Да, всем спасибо разобрался.
Программа опрашивает фотодатчик и выводит значение на жк.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог