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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 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,422
Вес репутации: 4370/119
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/107
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,422
Вес репутации: 4370/119
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/107
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/107
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
Сообщений: 257
Вес репутации: 617/38
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
Сообщений: 257
Вес репутации: 617/38
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/61
Ученый 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/61
Ученый 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
Сообщений: 108
Вес репутации: 763/19
siarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to behold
По умолчанию 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/61
Ученый 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/107
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, время: 23:26.


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