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

 
 
> Передать массив в функцию, Как??
Kir85
сообщение Oct 25 2009, 14:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 24-05-09
Из: Нижний Новгород
Пользователь №: 49 495



Здравствуйте. Есть такой код
Код
......


Вопрос. Как передать в функцию массив? делаю так...
Код
void paint(void logo){
  char    p;//Номер текущей страницы индикатора
  char    c;//Позиция по горизонтали выводимого байта
    for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора
        WriteCode(p|0xB8);//Установка текущей страницы для обоих кристаллов индикатора
        WriteCode(0x00);//Установка текущего адреса для записи данных в 0
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(logo);//Вывод очередного байта в индикатор
        }
        for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора
            WriteDataR(logo);//Вывод очередного байта в индикатор
        }
    }
}

пишет что "Error[Pe526]: a parameter may not have void type G:\AVR_CODE\mega8\iar\MT-12232B\main.cpp 155
"
Причина редактирования: Удален графоманский исходник

Прикрепленные файлы
Прикрепленный файл  mt_12232b.rar ( 3.25 килобайт ) Кол-во скачиваний: 13
 


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
aaarrr
сообщение Oct 25 2009, 14:18
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Kir85 @ Oct 25 2009, 17:14) *
Вопрос. Как передать в функцию массив?

В таких случаях передается указатель на массив.
Go to the top of the page
 
+Quote Post
Kir85
сообщение Oct 25 2009, 14:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 24-05-09
Из: Нижний Новгород
Пользователь №: 49 495



Напишите, пожалуйста, прямо текст...


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 25 2009, 14:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kir85 @ Oct 25 2009, 17:20) *
Напишите, пожалуйста, прямо текст...

Код
void paint(unsigned char *logo){
...
        for(char c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL( *logo++);//Вывод очередного байта в индикатор
        }
....

Moderator:
Преренесено в раздел для начинающих. Автору крайне желательно начать читать "буквари".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kir85
сообщение Oct 25 2009, 15:22
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 24-05-09
Из: Нижний Новгород
Пользователь №: 49 495



Код
paint(Logo122);

При вызове функции ошибка "Error[Pe167]: argument of type "char __flash (*)[122]" is incompatible with parameter of type "unsigned char *" G:\AVR_CODE\mega8\iar\MT-12232B\main.cpp 53
"

Сообщение отредактировал Kir85 - Oct 25 2009, 15:23


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 25 2009, 15:44
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kir85 @ Oct 25 2009, 18:22) *
"Error[Pe167]: argument of type "char __flash (*)[122]" is incompatible with parameter of type "unsigned char *"

Ну и приведите квалификаторы в соответствие. Для C++ можете вместо указателя воспользоваться передачей параметра по ссылке.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kir85
сообщение Oct 26 2009, 06:12
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 24-05-09
Из: Нижний Новгород
Пользователь №: 49 495



Разобрался. Может кому то пригодится...
массив...
Код
__flash char Logo122_1[4][122]={...}

функция...
Код
void paint_1(__flash char logo[4][122]){
  char    p;//Номер текущей страницы индикатора
  char    c;//Позиция по горизонтали выводимого байта
    for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора
        WriteCode(p|0xB8);//Установка текущей страницы для обоих кристаллов индикатора
        WriteCode(0x00);//Установка текущего адреса для записи данных в 0
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(logo[p][c]);//Вывод очередного байта в индикатор
        }
        for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора
            WriteDataR(logo[p][c]);//Вывод очередного байта в индикатор
        }
    }
}

вызов функции...
Код
paint_1(Logo122_1);


--------------------
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 26 2009, 07:46
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



А так как вам советовали - через указатель - не лучше будет реализовать вашу функцию?
Попробуйте откомпилировать ваш вариант и тот что приведён ниже и сравнить как компилятор передаёт параметры в функцию.
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 26 2009, 07:56
Сообщение #9


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

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



Цитата(Kir85 @ Oct 25 2009, 16:14) *
Вопрос. Как передать в функцию массив?

Раз такой вопрос возникает - та тема будет полезной, внимательно просмотрите всю.
http://electronix.ru/forum/index.php?showt...=63888&st=0


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 26 2009, 08:54
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Жаль модератор удалил код из поста #8 приняв его за чрезмерное цитирование.
Привожу в кратце что там должно быть чтобы передать массив через указатель

Код
__flash char Logo122_1[4][122]={...}

void paint_1(char __flash  *logo)
{
......................................................
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(*logo++);//Вывод очередного байта в индикатор
        }
...........................................................
}
вызов функции...
paint_1(&Logo122_1[0][0]);
Go to the top of the page
 
+Quote Post

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

 


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


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