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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> avr155, Вопрос
defunct
сообщение Jul 21 2007, 18:27
Сообщение #16


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(alux @ Jul 21 2007, 20:51) *
Если имя массива использовать в качестве указателя на первый элемент, можно ли использовать его вместо указателя *pic? Т.е. написать *(logo++) вместо *pic++.

Массив нельзя ++ ...
Его можно только индексировать, либо так

logo[x]

либо так

*(<тип>)(logo + x);
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 22 2007, 18:36
Сообщение #17


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(alux @ Jul 21 2007, 20:51) *
Если имя массива использовать в качестве указателя на первый элемент, можно ли использовать его вместо указателя *pic? Т.е. написать *(logo++) вместо *pic++.
Нельзя. Имя logo - "константа", устанавливаемая линкером на этапе сборки проекта. Её можно использовать в выражениях, но её нельзя изменить.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
alux
сообщение Jul 23 2007, 08:21
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Не получается у меня загрузить картинку в индикатор с использованием аппаратного TWI с прерываниями (avr315). Хотя все работает, если формировать старт/стоп, отправку байта/адреса функционально, как в avr155. Прерывания после инициализации TWI разрешил. Что я не так делаю? Выкладываю код. В нем закоментированы участки кода, которые относятся к avr155.
Поделитесь опытом использования avr315.
Прикрепленные файлы
Прикрепленный файл  LCD_Init.rar ( 74 байт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
alux
сообщение Jul 23 2007, 16:31
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(defunct @ Jul 21 2007, 21:27) *
Массив нельзя ++ ...

Просматривал исходники на avrlib и наткнулся на запись "localBuffer[0]++;" , противоречащую Вашему утверждению. Это в функции i2cSlaveTransmitService. Что Вы скажете на это?
Прикрепленные файлы
Прикрепленный файл  i2ctest.rar ( 2.25 килобайт ) Кол-во скачиваний: 106
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 23 2007, 17:18
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alux @ Jul 23 2007, 19:31) *
Что Вы скажете на это?
Что здесь инкрементируется не указатель на ячейку а содержимое ячейки localBuffer[0], что ничему не противоречит. Чтобы было понятнее - имя массива - константный указатель, т.е. указатель, который нельзя изменять. Можно завести обычный указатель, который будет указывать на тот же массив и уже его можно увеличивать/уменьшать:
Код
char Buffer[100]; // Buffer = имя масива, или (что то же самое) константный указатель на его нулевой элемент
void test(void)
{
   Buffer++;  // нельзя, Buffer - константный указатель
   char *pTmp;   // объявляем неконстантный указатель
   pTmp = Buffer; // pTmp указывает на нулевой элемент массива
   pTmp = &Buffer[0]; // то же самое

   pTmp = &Buffer[1]; //pTmp указывает на первый элемент массива
   pTmp = Buffer + 1;  // то же самое

   Buffer[0]++;   // увеличили на 1 первый элемент массива
   pTmp[0]++;   // то же самое
   *pTmp++;     // то же самое

   pTmp++;   // можно, pTmp - обычный указатель, увеличили указатель, теперь pTmp указывает на второй элемент.

   *(pTmp - 1)++;   // увеличили на 1 первый элемент массива

}


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alux
сообщение Jul 23 2007, 18:44
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Скажите, пожалуйста, стоит ли заморачиваться с аппаратным TWI с прерываниями (avr315) для управления LCD-индикатором TIC154 ? Если да, то покажите на примере. Например, необходимо произвести следующую последовательность :
START
Send(Address+W)
Send(N-bytes)
RESTART
Send(Address+W)
Send(M-bytes) //M=1064
STOP

Спасибо
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 23 2007, 20:43
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(alux @ Jul 23 2007, 21:44) *
Если да, то покажите на примере.

А вы посмотрели тот пример, что я давал? Он 100% рабочий.
К сожалению портировать его на AVR смогу только на выходных, т.к. вся неделя загружена. Попробуйте перенести на AVR самостоятельно...

I2DAT ---> TWDR
I2STAT ---> TWSR
I2CON ---> TWCR

В остальном остается только обрабочик прерывания оформить, и настроить скорость TWI...
Go to the top of the page
 
+Quote Post

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

 


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


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