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

 
 
> Кто из нас сошел с ума - IAR или я?
Kitsok
сообщение Nov 22 2006, 00:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Итак, вот что имеем на входе:
Код
static __arm __irq void vADC_ISR(void)
{

  unsigned portCHAR sr =0;
  unsigned portCHAR i = 0;
  AT91_REG * ADDR;
  
  // Read status register
  sr = a_pADC->ADC_SR;
  
  sBUTTONS[7]=sr;
   for (i=0;i<8;i++)
   {
     ADDR = AT91C_ADC_CDR0 + (4*i);
    
     if ( (sr >> i) & 0x01)
      {
        // Bit is set, put data to array
        sADC_RAW[i] = *(ADDR);
      }
   }
  // Start new conversion
  a_pADC->ADC_CR = 0x2;
  
  /* End the interrupt in the AIC. */  
  AT91C_BASE_AIC->AIC_EOICR = 0;
}



Обратите внимание на переменную ADDR, я слева буду писать значение i, а справа - значение ADDR, полученное при отладке через JTAG:

i=0 ADDR=0xFFFD8030
i=1 ADDR=0xFFFD8040
i=2 ADDR=0xFFFD8050
ну и так далее.

Слушайте, может я умом тронулся, но вроде бы 0xFFFD8030 + 4 == 0xFFFD8034, или я чего-то недопонимаю? Контроллер - SAM7S256

Уж не знаю, почему так, но почему-то с адресом как с обычным числом работать нельзя.
Тупое ADDR= AT91C_ADC_CDR0 + i; заработало. Компиляцкий компилятор перестал умножать на 4....

Сообщение отредактировал Kitsok - Nov 22 2006, 00:20
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Nov 22 2006, 00:38
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Дело в том, что ADDR - указатель на Long, поэтому что ADDR[2], что ADDR +2 будет реально смещать на 2 элемента структуры, то есть на 2*4 байт. Если попытаться сделать побайтный адрес то компилер возможно выдаст ошибку. Можно написать так:
ADDR = (char *)AT91C_ADC_CDR0 + (4*i);
Хотя в Вашем случае побайтно делать адреса не стоит. Лучше оставить как есть. Без умножения на 4. Короче, компилятор всё делает как надо.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 22 2006, 09:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Спасибо за ответы.

Хотя я первый раз сталкиваюсь с тем, что видя в выражении указатель, компилятор приводит все выражение к указателю. Хоть отругался бы что-ли, что не (вполне) совместимые типы.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:10
Рейтинг@Mail.ru


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