Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 28.02.2017, 14:02   #1
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Передача 2-х мерного массива русских симв в функцию

Здравствуйте уважаемые специалисты!
У меня мало опыта в программировании на C и я столкнулся с проблемой. Мне необходимо передать массив русских строк в функцию. Бьюсь долгое время - без результата. Прошу помощи.
Использую PIC18F45K80, компилятор XC8, массив задан так:
const unsigned char DISp [] [21] = {
{0x45,0x54,0x34,0x45,0x02,0x54,0x54,0x05,0x25,0xF4 ,0xD4,0xA3,0xF4,0xB4,'\0'},//"ТЕСТ EEPROM:OK",
{0x45,0x54,0x34,0x45,0x02,0x54,0x54,0x05,0x25,0xF4 ,0xD4,0xA3,0x84,0x16,0x07,0x97,0x1C,0x56,0xDB,0x16 ,'\0'},//"ТЕСТ EEPROM:Нарушена",
{0x35,0x95,0x35,0xA3,0x84,0x56,0xFB,0x02,0xF6,0xFB ,0x3B,0x56,0xFB,0x16,0x02,0xF6,0xFB,0x02,0xE4,0x13 ,'\0'},//"SYS:Нет ответа от N1",
{0x35,0x95,0x35,0xA3,0x84,0x56,0xFB,0x02,0xF6,0xFB ,0x3B,0x56,0xFB,0x16,0x02,0xF6,0xFB,0x02,0xE4,0x23 ,'\0'},//"SYS:Нет ответа от N2",
{0x35,0x95,0x35,0xA3,0x84,0x56,0xFB,0x02,0xF6,0xFB ,0x3B,0x56,0xFB,0x16,0x02,0xF6,0xFB,0x02,0xE4,0x03 ,'\0'},//"SYS:Нет ответа от N0",
{0x35,0x95,0x35, 0xA3, 0x14,0xAB,0xFB,0x8B,0x3B,0xDB,0x3C, 0x02, 0x23, 0x02, 0xEB,0x97,0xBB,0x4C,0xFB,0x16,'\0'}};//"SYS:Активны 2 пульта"
Как мне передать его в функцию для обработки?
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 14:18   #2
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Здравствуйте уважаемые специалисты!
У меня мало опыта в программировании на C и я столкнулся с проблемой. Мне необходимо передать массив русских строк в функцию. Бьюсь долгое время - без результата. Прошу помощи.
Использую PIC18F45K80, компилятор XC8, массив задан так:
const unsigned char DISp [] [21] = {
{0x45,0x54,0x34,0x45,0x02,0x54,0x54,0x05,0x25,0xF4 ,0xD4,0xA3,0xF4,0xB4,'\0'},//"ТЕСТ EEPROM:OK",
Как мне передать его в функцию для обработки?
У вас кодировка соответствует знакогенератору на кириллице, который зашит в символьные дисплеи Winstar. Для передачи строки как параметра нужно передать указатель на начало строки.

И нет никакого смысла запихивать все строк в многомерный массив. Лучше каждую строку написать отдельно со своим именем, а затем использовать массив указателей на строки.
Миниатюры
CP-CT.PNG   WinstarCompatible.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 28.02.2017, 14:26   #3
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Pridnya Посмотреть сообщение
У вас кодировка соответствует знакогенератору на кириллице, который зашит в символьные дисплеи Winstar. Для передачи строки как параметра нужно передать указатель на начало строки.

И нет никакого смысла запихивать все строк в многомерный массив. Лучше каждую строку написать отдельно со своим именем, а затем использовать массив указателей на строки.
Именно Winstar... Не могли бы вы подробней объяснить? Создать несколько одномерных массивов с разными именами и массив указателей на начало каждого из них? И ссылку на генератор если можно...
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 14:33   #4
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Именно Winstar... Не могли бы вы подробней объяснить? Создать несколько одномерных массивов с разными именами и массив указателей на начало каждого из них?
Ну да. И не заниматься самомазохизмом и использовать строки:
Код:
const unsigned char Str1[]="Строка №1";
const unsigned char Str2[]="Строка №2";
const unsigned char Str3[]="Строка №3";
const unsigned char Str4[]="Строка №4";
const unsigned char Str5[]="Строка №5";

const unsigned char* StrArr[]=
{
  Str1, Str2, Str3, Str4, Str5
};

//использовать 
  unsigned char * Str;
  Str = StrArr[0];
  Str = StrArr[4];
  Str = Str1;
тут с const прийдется поиграться, чтобы строки во флеше располагались, и чтобы их в функцию можно было передать. Еще, возможно, компилятору не понравится что переменные StrX не имеют заранее заданного размера, тут поможет #define.

PS если на экране будет выводиться аброкадабра, делается таблица перекодировки и каждый символ перед выводом перекодируется в соответствии с ней (на лету). Этот вопрос здесь много раз обсуждался и была куча примеров как это реализовать.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 28.02.2017, 14:36   #5
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от IceS Посмотреть сообщение
Ну да. И не заниматься самомазохизмом и использовать строки:
[CODE]
const unsigned char Str1[]="Строка №1";
const unsigned char Str2[]="Строка №2";
const unsigned char Str3[]="Строка №3";
const unsigned char Str4[]="Строка №4";
const unsigned char Str5[]="Строка №5";

.
Проблема в следующем: как только я инициализирую одномерный массив с русскими символами - сразу ошибка "недопустимый символ...". Из-за чего и занялся мазохизмом... Сейчас еще раз попробую...
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 14:37   #6
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Именно Winstar... Не могли бы вы подробней объяснить? Создать несколько одномерных массивов с разными именами и массив указателей на начало каждого из них? И ссылку на генератор если можно...
Как-то я упустил из вида, что у вас порядок полубайтов перепутан, код символа пробел 0x20, а у вас он 0x02. И такая же ошибка для каждого символа. Это вы так шифруетесь? Тогда между микроконтроллером с такими строками в памяти и дисплеем Winstar придется ставить дешифратор.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 28.02.2017, 14:38   #7
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Как-то я упустил из вида, что у вас порядок полубайтов перепутан, код символа пробел 0x20, а у вас он 0x02. Это вы так шифруетесь? Тогда между микроконтроллером с такими строками в памяти и дисплеем Winstar придется ставить дешифратор.
Вполне могут быть ошибки... еще не видел их на дисплее Видимо "upper" и "lower" в моем понимании по-другому видится...
Как я и предполагал:
const unsigned char DISp [] = "пароа";
дает ошибку:
Warning at file ../main_18F45K80.c line 42 column 31: (228) illegal character (0xEF)
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 15:05   #8
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Или попробовать не обращать на это "предупреждение" внимание?
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 16:02   #9
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Или попробовать не обращать на это "предупреждение" внимание?
Ну на варнинг-то можно и забить.
Я думал там Еррор и компиляция не возможна .
PS можно прагмой этот варнинг запретить, если сильно достанет .
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 28.02.2017, 16:05   #10
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от IceS Посмотреть сообщение
Ну на варнинг-то можно и забить.
Я думал там Еррор и компиляция не возможна .
PS можно прагмой этот варнинг запретить, если сильно достанет .
Это меня не пугает, попробую... Но, большая вероятность несовпадения кодовых таблиц и на дисплее я увижу кракозябры, поэтому хотелось бы разобраться как все-таки передать в функцию массив из 1-го поста?
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 16:17   #11
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Это меня не пугает, попробую... Но, большая вероятность несовпадения кодовых таблиц и на дисплее я увижу кракозябры, поэтому хотелось бы разобраться как все-таки передать в функцию массив из 1-го поста?
http://www.microchip.su/showthread.php?t=1319
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 28.02.2017, 16:26   #12
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Спасибо, наверно тему надо закрыть. Решение проблемы вывода на дисплей решается через одномерные массивы с массивом указателей на них.
Видимо продолжение обсуждения вопроса о двумерном массиве из 1-го поста будет считаться уже флудом...?
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 17:02   #13
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Для передачи статического двумерного массива элементов типа char из 1-го поста можно использовать такой способ:
void WR_DIS_Ser_D(unsigned char count, char MSG[][20], unsigned char m)//запись строки из MSG длиной count в DDRAM
{
....
SSPBUF = MSG[m][i];
...
}

int main(void)
{
...
WR_DIS_Ser_D(strlen(DISp[1]),DISp,1);//передается 2-я строка массива
...
}
может не слишком наглядно, но принцип такой...
P.S. Удалены символы конца строки '\0' в массиве
Romius вне форума   Ответить с цитированием
Старый 28.02.2017, 19:36   #14
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

В функцию передавать не массив, а указатель на него. Вот объявление функции:
void func(const unsigned char* Buf);
Вот вызов этой функции с передачей указателя на данные:
func(DISp);
Вот отрывок из кода функции:
a=Buf[2][3];
Если массив глобальный, его вообще никуда передавать не надо. Лишь бы был объявлен перед функцией.
Pasha_Bi вне форума   Ответить с цитированием
Старый 28.02.2017, 20:07   #15
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 43
Сообщений: 269
Вес репутации: 617/39
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

На счет Buf[2][3] я "нащедрил", извиняюсь. Попроще надо быть:
// Передача в функцию 3-й строки
func(&DISp[2][0]);
а в функции, например:
// Обращение к 4-му элементу строки
a=Buf[3];
Pasha_Bi вне форума   Ответить с цитированием
Старый 01.03.2017, 07:48   #16
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Pasha_Bi Посмотреть сообщение
На счет Buf[2][3] я "нащедрил", извиняюсь. Попроще надо быть:
// Передача в функцию 3-й строки
func(&DISp[2][0]);
а в функции, например:
// Обращение к 4-му элементу строки
a=Buf[3];
Спасибо что продолжили разговор. Попробовал передать массив через указатель как вы предложили.
Код:
const unsigned char DISp [] [21] = {
    {0x54,0x45,0x43,0x54,0x20,0x45,0x45,0x50,0x52,0x4F,0x4D,0x3A,0x4F,0x4B},//"ТЕСТ EEPROM:OK",
    {0x54,0x45,0x43,0x54,0x20,0x45,0x45,0x50,0x52,0x4F,0x4D,0x3A,0x48,0x61,0x70,0x79,0xC1,0x65,0xBD,0x61},//"ТЕСТ EEPROM:Нарушена",
    {0x53,0x59,0x53,0x3A,0x48,0x65,0xBF,0x20,0x6F,0xBF,0xB3,0x65,0xBF,0x61,0x20,0x6F,0xBF,0x20,0x4E,0x31},//"SYS:Нет ответа от N1",
    {0x53,0x59,0x53,0x3A,0x48,0x65,0xBF,0x20,0x6F,0xBF,0xB3,0x65,0xBF,0x61,0x20,0x6F,0xBF,0x20,0x4E,0x32},//"SYS:Нет ответа от N2",
    {0x53,0x59,0x53,0x3A,0x48,0x65,0xBF,0x20,0x6F,0xBF,0xB3,0x65,0xBF,0x61,0x20,0x6F,0xBF,0x20,0x4E,0x30}
        };//"SYS:Нет ответа от N0",

//Объява функции
void WR_DIS_Ser_D( unsigned char count, char *MSG)//запись строки из MSG длиной count в DDRAM
{
    unsigned char i;
    RC2 = 0;//выбор устройства
    RC3=1;
    __delay_us(del);
    RC3=0;
    RC5 = 1;
    __delay_us(del);
    RC3=1;
    __delay_us(del);
    RC5 = 0;
    RC3=0;
    __delay_us(del);
    RC3=1;
    PIR1bits.SSPIF = 0;
    SSPCON1bits.SSPEN=1;//Разрешить SPI-режим
    for(i=0;i<count;i++)
    {
        SSPBUF = MSG[i];
        while (!DIS) {}
        DIS=0;
    }
    SSPCON1bits.SSPEN=0;//Запретить SPI-режим
    RC2=1;__delay_us(100);
}

//передача массива
WR_DIS_Ser_D( 4, &DISp[2][0] );//-------Warning at file ../main_18F45K80.c line 409 column 60: (359) illegal conversion between pointer types
В результате компилятор выдал предупреждение. Не могли бы вы сказать что не так?

Последний раз редактировалось IceS; 01.03.2017 в 15:37. Причина: теги [CODE] вставил
Romius вне форума   Ответить с цитированием
Старый 01.03.2017, 09:22   #17
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 67
Сообщений: 577
Вес репутации: 1705/62
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
//Объява функции
void WR_DIS_Ser_D( unsigned char count, char *MSG)//запись строки из MSG длиной count в DDRAM
WR_DIS_Ser_D(4,&DISp[2][0]);//-------Warning at file ../main_18F45K80.c line 409 column 60: (359) illegal conversion between pointer types
В результате компилятор выдал предупреждение. Не могли бы вы сказать что не так?
Вы бы хоть место указали, на которое ругается компилятор, да и текст программы хорошо бы видеть форматированным.
Массивы объявлены как unsigned char, а в заголовке функции - char. Может быть это?
__________________
Не знать - не стыдно, стыдно не учиться.

Последний раз редактировалось Ученый; 01.03.2017 в 09:28. Причина: фигню написал
Ученый вне форума   Ответить с цитированием
Старый 01.03.2017, 09:42   #18
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Ученый Посмотреть сообщение
Вы бы хоть место указали, на которое ругается компилятор, да и текст программы хорошо бы видеть форматированным.
Массивы объявлены как unsigned char, а в заголовке функции - char. Может быть это?
На какую строку выдается предупреждение - показано. Исправил заголовок функции на unsigned char -то же.
Romius вне форума   Ответить с цитированием
Старый 01.03.2017, 11:07   #19
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 67
Сообщений: 577
Вес репутации: 1705/62
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
На какую строку выдается предупреждение - показано. Исправил заголовок функции на unsigned char -то же.
И где в Вашем тексте эта " line 409 column 60"?
__________________
Не знать - не стыдно, стыдно не учиться.
Ученый вне форума   Ответить с цитированием
Старый 01.03.2017, 11:14   #20
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
На какую строку выдается предупреждение - показано. Исправил заголовок функции на unsigned char -то же.
WR_DIS_Ser_D(4,&DISp[2][0]) * ;//-------Warning at file ../main_18F45K80.c line 409 column 60: (359) illegal conversion between pointer types
Курсор предупреждения стоит сразу за скобкой (где сейчас *)- это 409 строка. Я не знаю как скопировать с номерами строк (Proteus)
Romius вне форума   Ответить с цитированием
Старый 01.03.2017, 12:04   #21
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 47
Сообщений: 113
Вес репутации: 1003/23
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Исправил заголовок функции на unsigned char -то же.
Код:
void WR_DIS_Ser_D( unsigned char count, const unsigned char *MSG) {
    [...]
}
Разница между unsigned char* и const unsigned char* порой фатальна - первый указывает на модифицируемую память, второй - на немодифицируемую. А модификатор const он сродни вирусу - заставляет себя "уважать" в любой точке куда добирается охраняемый им указатель.
siarzhuk вне форума   Ответить с цитированием
Старый 01.03.2017, 13:23   #22
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Предупреждение пропало только когда убрал "const" и в объяве массива и в объяве функции. Попробую игнорировать предупреждение (массив мне нужен в памяти программ). Спасибо за помощь, тема решена.
Romius вне форума   Ответить с цитированием
Старый 01.03.2017, 14:17   #23
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 67
Сообщений: 577
Вес репутации: 1705/62
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Предупреждение пропало только когда убрал "const" и в объяве массива и в объяве функции... (массив мне нужен в памяти программ).
Вот это, может быть, зря. Массив будет создан в ОЗУ и заполнен текстами при старте программы. Правильнее указать const везде. Указатели на ОЗУ и память программ разного размера. И еще - в заголовке функции переменная MSG объявлена как указатель, а используется как индексированный массив SSPBUF = MSG[i];
Использование const во многом зависит от компилятора. Например для MCC18 массив в памяти программ должен быть описан как const rom char.
__________________
Не знать - не стыдно, стыдно не учиться.

Последний раз редактировалось Ученый; 01.03.2017 в 14:27.
Ученый вне форума   Ответить с цитированием
Старый 01.03.2017, 15:12   #24
Romius
Junior Member
 
Регистрация: 07.02.2017
Адрес: г.Заволжье
Возраст: 42
Сообщений: 23
Вес репутации: 100/4
Romius will become famous soon enoughRomius will become famous soon enough
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Когда использую const то при компиляции вижу , что массив располагается в памяти программ (по заполнению памяти в %).
"И еще - в заголовке функции переменная MSG объявлена как указатель, а используется как индексированный массив SSPBUF = MSG[i]". - Как же использовать массив ?
Напишите пример, пожалуйста. Не совсем понял.
Romius вне форума   Ответить с цитированием
Старый 01.03.2017, 15:34   #25
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Передача 2-х мерного массива русских симв в функцию

Цитата:
Сообщение от Romius Посмотреть сообщение
Когда использую const то при компиляции вижу , что массив располагается в памяти программ (по заполнению памяти в %).
"И еще - в заголовке функции переменная MSG объявлена как указатель, а используется как индексированный массив SSPBUF = MSG[i]". - Как же использовать массив ?
Напишите пример, пожалуйста. Не совсем понял.
1. этот массив по любому будет располагаться в памяти программ. Если const не использовать, то при запуске этот массив будет скопирован в РАМ (ну и часть этой памяти будет занята).
2. если массив одномерный - убрать индекс, если двуменый - то вроде все правильно.
Сейчас посмотрел - все там нормально с передачей индекса на массив
WR_DIS_Ser_D( 4, &DISp[2][0] );
можно еще так:
WR_DIS_Ser_D( 4, DISp[2] ); //убрать [0] ссылку на 0й элемент, и убрать адресс на этот элемент "&"
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...

Последний раз редактировалось IceS; 01.03.2017 в 15:40.
IceS вне форума   Ответить с цитированием
Ответ

Метки
lcd


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как написать функцию, которая возвращает размер массива?! Gera82 Продукция MICROCHIP 9 02.12.2011 15:44
Передача в функцию аргументов signed/unsigned? maxNTF Продукция MICROCHIP 16 26.08.2011 13:38
передача массива в функцию user_22 Продукция MICROCHIP 31 23.05.2011 15:02
C32 Compiler передача массива в функцию. gazpr1bor Вопросы начинающих 24 27.10.2010 14:05
Почему не работает передача регистра в функцию??? Gera82 Продукция MICROCHIP 1 09.01.2010 03:42


Часовой пояс GMT +3, время: 11:40.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot