MenuSystem.h + lcd_1602_rus как вывести меню на русском?

MacSim
Offline
Зарегистрирован: 28.11.2012

использую библиотеки:

https://github.com/ssilver2007/LCD_1602_RUS

https://github.com/jonblack/arduino-menusystem

для вывода русскаго используется конструкция lsd.print(L"Текст на русском");

не получается вывести русское название меню.

проблема в том, что перед русским идет литера L

но как добавить ее если текст(стринг) получаем путем вызова функции, возвращается из вызванной функции.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Для начала узнать что эта "литера L" означает. Тогда станет понятнее что нужно сделать.

MacSim
Offline
Зарегистрирован: 28.11.2012

спасибо за разъяснения. все решил. теперь меню на русском.

mvn77
Offline
Зарегистрирован: 31.03.2017

Может кто подскажет почему при компиляции примера выдает ошибки

 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp: In member function 'void LCD_1602_RUS::print(const char*)':
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:53:40: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
 
     current_char += mbtowc(&_str, c_str+current_char, 2);
 
                                        ^
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:34:9: error:   initializing argument 2 of 'uint8_t LCD_1602_RUS::mbtowc(wchar_t*, char*, uint8_t)' [-fpermissive]
 
 uint8_t LCD_1602_RUS::mbtowc(wchar_t *_chr, char *_str, uint8_t mb_num) {
 
         ^
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp: In member function 'void LCD_1602_RUS::print(const String&)':
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:78:27: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
 
   char *c_str = str.c_str();
 
                           ^
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp: In member function 'void LCD_1602_RUS::printwc(wchar_t)':
 
C:\Users\mvn77\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:195:41: error: 'memcpy_PF' was not declared in this scope
 
       memcpy_PF(rus_, (uint32_t)rus_B, 8);
 
                                         ^
 
exit status 1
Ошибка компиляции для платы Generic STM32F103C series.
ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

mvn77 пишет:

Может кто подскажет почему при компиляции примера выдает ошибки

Потому, что написано с ошибками. Конкретно у Вас тут 4 сообщения про три разные ошибки. Читайте сообщения, переводите и исправляйте.

mvn77
Offline
Зарегистрирован: 31.03.2017

Так этож вроде библиотека которая у всех работает.Вот и интересно почему у меня выдает ошибки... Пример тоже вроде без ошибок. Подозреваю что проблема в версии IDE либо в несовместимости с STM32.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Если Вам говорят " error: 'memcpy_PF' was not declared in this scope", значит он "not declared in this scope" будь там хоть STM, хоть MTS

mvn77
Offline
Зарегистрирован: 31.03.2017

Да проблема в несовместимости кода под разные платформы, изменив опцию компиляции на Arduino Nano, все прошло без ошибок. Из чего следуте что под STM32 она не подходит. Жаль - аесть еще подобного рода библиотеки?

mvn77
Offline
Зарегистрирован: 31.03.2017

Вопрос всетаки остается актуальным - как исправить библиотку под STM 32. версию ЕвгенийП мы услышали - не пойдет ни для МТS ни для SТМ, может будут другие мнения?

К примеру заменить функцию memcpy_PF чем либо другим.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mvn77 пишет:

Вопрос всетаки остается актуальным - как исправить библиотку под STM 32. версию ЕвгенийП мы услышали - не пойдет ни для МТS ни для SТМ, может будут другие мнения?

К примеру заменить функцию memcpy_PF чем либо другим.

А что эта функция memcpy_PF делает?

mvn77
Offline
Зарегистрирован: 31.03.2017

memcpy

[править | править код]
Материал из Википедии — свободной энциклопедии
 

Перейти к навигацииПерейти к поиску

memcpy (от англ. memory copy — копирование памяти) — функция стандартной библиотеки языка программирования Си, копирующая содержимое одной области памяти в другую.

Функция определена в заголовочном файле string.h (а также в mem.h), описывается в стандартах ANSI C и POSIX.

memcpy_s[править | править код]

Чтобы не выполнять лишних действий, функция memcpy() не проверяет соответствие размера выходного буфера количеству копируемых байт, возлагая эту обязанность на программиста. В результате совершается достаточно много ошибок, способных привести к переполнению буфера.

Поэтому ближе к концу 2009 г. компания Microsoft добавила memcpy(), CopyMemory() и RtlCopyMemory() в список функций, запрещённых в соответствии с методикой разработки безопасных программ Secure Development Lifecycle (SDL). Те разработчики, которые хотят создавать совместимые с SDL приложения, должны будут использовать вместо memcpy() функцию memcpy_s, позволяющую указывать размер буфера. Функция memcpy_s() непереносима и не включена в стандарт Си.

Определение[править | править код]

void *memcpy(void *dst, const void *src, size_t n);

где:

  • dst — адрес буфера назначения
  • srс — адрес источника
  • n — количество байт для копирования

Функция копирует n байт из области памяти, на которую указывает src, в область памяти, на которую указывает dst. Функция возвращает адрес назначения dst.

Области памяти не должны перекрываться {\displaystyle (\|src-dst\|\geq n)}(\|src-dst\|\geq n), иначе данные могут быть скопированы неправильно, например таким образом:

 __src___
|        |
1234567890xxxxx
  |__   ___|
     dst

после копирования буфер dst содержит данные отличные от исходных, так как они были разрушены в процессе копирования:

   __dst___
  |        |
121212121212xxx

Что получится на самом деле, зависит от реализации функции (пример относится к одной из реализации приведенных ниже).

Для правильного копирования перекрывающихся областей нужно использовать функцию memmove(). Некоторые реализации memcpy() (например в libc FreeBSD и OpenBSD) делают то же что и memmove(), принуждая работать правильно даже неправильно написанную программу, однако при написании переносимой программы на это надеяться нельзя.

Алгоритм работы и реализации[править | править код]

memcpy() копирует содержимое src в буфер dst, например, так:

int i;

for( i = 0; i < n; i++ )
   ((unsigned char*)dst)[i] = ((unsigned char*)src)[i];
 
return dst;

Но данный пример будет работать медленнее, чем любые практические реализации, так как они оптимизированы:

  • Не используют индексы, как в примере.
  • Перемещают за один цикл не один байт, а блок, равный машинному слову (2, 4 или 8 байт; 16, 32 или 64 бит), которое копируется процессором за то же время, что и байт. Такой подход наиболее эффективен при копировании данных, выровненных на границу машинного слова.
  • Иногда используют инструкции процессора для работы с блоками данных (movsX для i386) в этом случае функция пишется с применением языка ассемблера

Пример частично оптимизированной версии:

int i, m;
unsigned long  *wdst = dst;  // текущая позиция в буфере назначения
unsigned long  *wsrc = src;  // текущая позиция в источнике
unsigned char  *cdst, *csrc;
 
for(i = 0, m = n / sizeof(long); i < m; i++)  // копируем основную часть блоками по 4 или 8 байт
   *(wdst++) = *(wsrc++);                     // (в зависимости от платформы)
 
cdst = (unsigned char*)wdst;
csrc = (unsigned char*)wsrc;

for(i = 0, m = n % sizeof(long); i < m; i++)             // остаток копируем побайтно
   *(cdst++) = *(csrc++);
 
return dst;

Данная версия копирует 4 или 8 байт (размер типа long равен 32 битам на 32-битной платформе и 64 на 64-битной) за цикл, но не проверяет выровненность данных.

Пример использования[править | править код]

#include <string.h>

unsigned int  array[512];                 // источник
unsigned char byte_array[sizeof(array) / sizeof(unsigned int)];  // буфер назначения

memcpy(byte_array, array, (sizeof(array) / sizeof(unsigned int)));

// В прошлой версии этого кода, byte_array объявлялся как byte_array[sizeof(array)], что приводит к тому, что он равен byte_array[2048],
// а должен быть 512. Поэтому размер массива array (ведь unsigned int занимает не 1 байт) нужно поделить на размер unsigned int ( sizeof(unsigned int)).

С

 

mvn77
Offline
Зарегистрирован: 31.03.2017

поняли?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
mvn77
Offline
Зарегистрирован: 31.03.2017

В общем автор ответил что - Это возможно. Чтобы решить вопрос работоспособности необходимо убрать все ссылки на дальнюю память (_PF) и во всех функциях убрать обращения к этой памяти, заменив их на работу с обычной памятью.

Вот боюсь что ума у меня на переписывания библиотеки не хватит....

попробовал заменить на memcpy но высыпало еще больше ошибок...

mvn77
Offline
Зарегистрирован: 31.03.2017
#include <Arduino.h>
#include <avr/pgmspace.h>
#include "LCD_1602_RUS.h"

wchar_t char_utf8[] = L" ";

//user_custom_symbols - количество символов, доступное пользователю для использования в своих целях (не более 8)
//Всего переопределяемых символов в LCD - 8.
//Символы с индексом от 0 до (7 - user_custom_symbols) используются библиотекой
//Символы с индексом от (8 - user_custom_symbols) до 7 - можно переопределять пользователю
//По умолчанию количество переопределяемых символов равно 0
LCD_1602_RUS :: LCD_1602_RUS(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t user_custom_symbols) : LiquidCrystal_I2C (lcd_Addr, lcd_cols, lcd_rows)
{
  max_symbol_count = 8 - user_custom_symbols;
  symbol_index = 0;
  cursor_col = 0;
  cursor_row = 0;
  ResetAllIndex();//Сброс значений индексов (неинициализированы = 255)
}
void LCD_1602_RUS::clear()
{
  LiquidCrystal_I2C::clear();
  ResetAllIndex();
}
void LCD_1602_RUS::setCursor(uint8_t col, uint8_t row)
{
  cursor_col = col;
  cursor_row = row;
  LiquidCrystal_I2C::setCursor(cursor_col, cursor_row);
}
uint8_t LCD_1602_RUS::getCursorCol()
{
  return cursor_col;
}
uint8_t LCD_1602_RUS::getCursorRow()
{
  return cursor_row;
}

uint8_t LCD_1602_RUS::mbtowc(wchar_t *_chr, char *_str, uint8_t mb_num) {
  if (mb_num != 2) return 0;
  if ((_str[0] & 0xC0) == 0xC0 && (_str[1] & 0x80) == 0x80) {
    *_chr = ((_str[0] & 0x1F) << 6) + (_str[1] & 0x3F);
    return 2;
  }
  else {
    *_chr = _str[0];
    return 1;
  }
}

void LCD_1602_RUS::print(const char *c_str) {
  wchar_t _str;
  int current_char = 0;
  int size = strlen(c_str);

  while (current_char < size)
  {
    current_char += mbtowc(&_str, (char *)c_str + current_char, 2);
    printwc(_str);
    cursor_col++;
  }
}
void LCD_1602_RUS::print(int val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(unsigned int val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(long val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(unsigned long val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(char val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(unsigned char val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}
void LCD_1602_RUS::print(const String &str) {
  wchar_t _str;
  const char *c_str = str.c_str();
  int current_char = 0;
  int size = str.length();

  while (current_char < size)
  {
    current_char += mbtowc(&_str, (char*)c_str + current_char, 2);
    printwc(_str);
    cursor_col++;
  }
}

void LCD_1602_RUS::print(double val, int base) {
  cursor_col += LiquidCrystal_I2C::print(val, base);
}

void LCD_1602_RUS::print(const wchar_t *_str) {
  int current_char  = 0;
  int size = 0;

  //Определяем длину строки (количество символов)
  while (_str[size] != 0)
  {
    size++;
  }

  while (current_char < size)
  {
    printwc(_str[current_char]);
    current_char++;
    cursor_col++;
  }

}
void LCD_1602_RUS::CharSetToLCD(uint8_t *array, uint8_t *index)
{
  uint8_t x, y;

  if (*index == 255) // Если символ еще не создан, то создаем
  {
    x = getCursorCol();
    y = getCursorRow();
    createChar(symbol_index, (uint8_t *)array);// Создаем символ на текущем (по очереди) месте в знакогенераторе (от 0 до MAX_SYMBOL_COUNT)
    setCursor(x, y);
    write(symbol_index);// Выводим символ на экран
    //Запомианем, что букве соответствует определенный индекс
    *index = symbol_index;
    symbol_index++;
    if (symbol_index >= max_symbol_count)
    {
      symbol_index = 0;
      ResetAllIndex();
    }
  }
  else   //Иначе печатаем уже существующий
    write(*index);
}
void LCD_1602_RUS::ResetAllIndex()
{
  symbol_index = 0;
  index_rus_B = 255;
  index_rus_G = 255;
  index_rus_D = 255;
  index_rus_ZH = 255;
  index_rus_Z = 255;
  index_rus_I = 255;
  index_rus_II = 255;
  index_rus_L = 255;
  index_rus_P = 255;
  index_rus_U = 255;
  index_rus_F = 255;
  index_rus_TS = 255;
  index_rus_CH = 255;
  index_rus_SH = 255;
  index_rus_SCH = 255;
  index_rus_tverd = 255;
  index_rus_Y = 255;
  index_rus_myagk = 255;
  index_rus_EE = 255;
  index_rus_YU = 255;
  index_rus_YA = 255;
  index_rus_b = 255;
  index_rus_v = 255;
  index_rus_g = 255;
  index_rus_d = 255;
  index_rus_yo = 255;
  index_rus_zh = 255;
  index_rus_z = 255;
  index_rus_i = 255;
  index_rus_ii = 255;
  index_rus_k = 255;
  index_rus_l = 255;
  index_rus_m = 255;
  index_rus_n = 255;
  index_rus_p = 255;
  index_rus_t = 255;
  index_rus_u = 255;
  index_rus_f = 255;
  index_rus_ts = 255;
  index_rus_ch = 255;
  index_rus_sh = 255;
  index_rus_sch = 255;
  index_rus_tverd_mal = 255;
  index_rus_y = 255;
  index_rus_myagk_mal = 255;
  index_rus_ee = 255;
  index_rus_yu = 255;
  index_rus_ya = 255;
}

void LCD_1602_RUS::printwc(const wchar_t _chr) {
  uint8_t rus_[8];
  switch (_chr)
  {
    //Русский алфавит, требующий новых символов
    //Единовременно может быть заменено только 8 символов
    case 1041: //Б
      memcpy(rus_, (uint32_t)rus_B, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_B);
      break;
    case 1043: //Г
      memcpy(rus_, (uint32_t)rus_G, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_G);
      break;
    case 1044: //Д
      memcpy(rus_, (uint32_t)rus_D, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_D);
      break;
    case 1046: //Ж
      memcpy(rus_, (uint32_t)rus_ZH, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ZH);
      break;
    case 1047: //З
      memcpy(rus_, (uint32_t)rus_Z, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_Z);
      break;
    case 1048: //И
      memcpy(rus_, (uint32_t)rus_I, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_I);
      break;
    case 1049: //Й
      memcpy(rus_, (uint32_t)rus_II, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_II);
      break;
    case 1051: //Л
      memcpy(rus_, (uint32_t)rus_L, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_L);
      break;
    case 1055: //П
      memcpy(rus_, (uint32_t)rus_P, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_P);
      break;
    case 1059: //У
      memcpy(rus_, (uint32_t)rus_U, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_U);
      break;
    case 1060: //Ф
      memcpy(rus_, (uint32_t)rus_F, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_F);
      break;
    case 1062: //Ц
      memcpy(rus_, (uint32_t)rus_TS, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_TS);
      break;
    case 1063: //Ч
      memcpy(rus_, (uint32_t)rus_CH, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_CH);
      break;
    case 1064: //Ш
      memcpy(rus_, (uint32_t)rus_SH, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_SH);
      break;
    case 1065: //Щ
      memcpy(rus_, (uint32_t)rus_SCH, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_SCH);
      break;
    case 1066: //Ъ
      memcpy(rus_, (uint32_t)rus_tverd, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_tverd);
      break;
    case 1067: //Ы
      memcpy(rus_, (uint32_t)rus_Y, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_Y);
      break;
    case 1068: //Ь
      memcpy(rus_, (uint32_t)rus_myagk, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_myagk);
      break;
    case 1069: //Э
      memcpy(rus_, (uint32_t)rus_EE, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_EE);
      break;
    case 1070: //Ю
      memcpy(rus_, (uint32_t)rus_YU, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_YU);
      break;
    case 1071: //Я
      memcpy(rus_, (uint32_t)rus_YA, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_YA);
      break;
    case 1073: //б
      memcpy(rus_, (uint32_t)rus_b, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_b);
      break;
    case 1074: //в
      memcpy(rus_, (uint32_t)rus_v, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_v);
      break;
    case 1075: //г
      memcpy(rus_, (uint32_t)rus_g, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_g);
      break;
    case 1076: //д
      memcpy(rus_, (uint32_t)rus_d, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_d);
      break;
    case 1105: //ё
      memcpy(rus_, (uint32_t)rus_yo, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_yo);
      break;
    case 1078: //ж
      memcpy(rus_, (uint32_t)rus_zh, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_zh);
      break;
    case 1079: //з
      memcpy(rus_, (uint32_t)rus_z, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_z);
      break;
    case 1080: //и
      memcpy(rus_, (uint32_t)rus_i, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_i);
      break;
    case 1081: //й
      memcpy(rus_, (uint32_t)rus_ii, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ii);
      break;
    case 1082: //к
      memcpy(rus_, (uint32_t)rus_k, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_k);
      break;
    case 1083: //л
      memcpy(rus_, (uint32_t)rus_l, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_l);
      break;
    case 1084: //м
      memcpy(rus_, (uint32_t)rus_m, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_m);
      break;
    case 1085: //н
      memcpy(rus_, (uint32_t)rus_n, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_n);
      break;
    case 1087: //п
      memcpy(rus_, (uint32_t)rus_p, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_p);
      break;
    case 1090: //т
      memcpy(rus_, (uint32_t)rus_t, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_t);
      break;
    case 1092: //ф
      memcpy(rus_, (uint32_t)rus_f, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_f);
      break;
    case 1094: //ц
      memcpy(rus_, (uint32_t)rus_ts, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ts);
      break;
    case 1095: //ч
      memcpy(rus_, (uint32_t)rus_ch, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ch);
      break;
    case 1096: //ш
      memcpy(rus_, (uint32_t)rus_sh, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_sh);
      break;
    case 1097: //щ
      memcpy(rus_, (uint32_t)rus_sch, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_sch);
      break;
    case 1098: //ъ
      memcpy(rus_, (uint32_t)rus_tverd_mal, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_tverd_mal);
      break;
    case 1099: //ы
      memcpy(rus_, (uint32_t)rus_y, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_y);
      break;
    case 1100: //ь
      memcpy(rus_, (uint32_t)rus_myagk_mal, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_myagk_mal);
      break;
    case 1101: //э
      memcpy(rus_, (uint32_t)rus_ee, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ee);
      break;
    case 1102: //ю
      memcpy(rus_, (uint32_t)rus_yu, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_yu);
      break;
    case 1103: //я
      memcpy(rus_, (uint32_t)rus_ya, 8);
      CharSetToLCD((uint8_t *)rus_, &index_rus_ya);
      break;
    //Русский алфавит, использующий одинаковые с английским алфавитом символы
    case 1040: //А
      LiquidCrystal_I2C::print("A");
      break;
    case 1042: //В
      LiquidCrystal_I2C::print("B");
      break;
    case 1045: //Е
      LiquidCrystal_I2C::print("E");
      break;
    case 1025: //Ё
      LiquidCrystal_I2C::print("E");
      break;
    case 1050: //К
      LiquidCrystal_I2C::print("K");
      break;
    case 1052: //M
      LiquidCrystal_I2C::print("M");
      break;
    case 1053: //H
      LiquidCrystal_I2C::print("H");
      break;
    case 1054: //O
      LiquidCrystal_I2C::print("O");
      break;
    case 1056: //P
      LiquidCrystal_I2C::print("P");
      break;
    case 1057: //C
      LiquidCrystal_I2C::print("C");
      break;
    case 1058: //T
      LiquidCrystal_I2C::print("T");
      break;
    case 1061: //X
      LiquidCrystal_I2C::print("X");
      break;
    case 1072: //а
      LiquidCrystal_I2C::print("a");
      break;
    case 1077: //е
      LiquidCrystal_I2C::print("e");
      break;
    case 1086: //o
      LiquidCrystal_I2C::print("o");
      break;
    case 1088: //p
      LiquidCrystal_I2C::print("p");
      break;
    case 1089: //c
      LiquidCrystal_I2C::print("c");
      break;
    case 1091: //y
      LiquidCrystal_I2C::print("y");
      break;
    case 1093: //x
      LiquidCrystal_I2C::print("x");
      break;
    case 0x00B0: //Знак градуса
      LiquidCrystal_I2C::write(223);
      break;
    //Английский алфавит без изменения
    default:
      LiquidCrystal_I2C::print((char)_chr);
      break;
  }
}

//Перевод символа из кодировки ASCII в UTF-8 (для печати расширенных русских символов на LCD)
wchar_t *LCD_1602_RUS::asciiutf8(unsigned char ascii)
{
  if (ascii == 168) *char_utf8 = 0x401; //код ASCII буквы Ё
  else if (ascii == 184) *char_utf8 = 0x451; //код ASCII буквы ё
  else if ((ascii >= 192) && (ascii <= 255)) //остальные буквы русского алфавита
  {
    *char_utf8 = ascii + 848;
  }
  else *char_utf8 = ascii;

  return char_utf8;
}

//Б
const byte rus_B[8] PROGMEM = {
  0b11111,
  0b10000,
  0b10000,
  0b11110,
  0b10001,
  0b10001,
  0b11110,
  0b00000
};
//Г
const byte rus_G[8] PROGMEM = {
  0b11111,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b00000
};
//Д
const byte rus_D[8] PROGMEM = {
  0b00110,
  0b01010,
  0b01010,
  0b01010,
  0b01010,
  0b01010,
  0b11111,
  0b10001
};
//Ж
const byte rus_ZH[8] PROGMEM = {
  0b10101,
  0b10101,
  0b10101,
  0b01110,
  0b10101,
  0b10101,
  0b10101,
  0b00000
};
//З
const byte rus_Z[8] PROGMEM = {
  0b01110,
  0b10001,
  0b00001,
  0b00110,
  0b00001,
  0b10001,
  0b01110,
  0b00000
};
//И
const byte rus_I[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b10001,
  0b00000
};
//Й
const byte rus_II[8] PROGMEM = {
  0b10101,
  0b10001,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b10001,
  0b00000
};
//Л
const byte rus_L[8] PROGMEM = {
  0b00111,
  0b01001,
  0b01001,
  0b01001,
  0b01001,
  0b01001,
  0b10001,
  0b00000
};
//П
const byte rus_P[8] PROGMEM = {
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b00000
};
//У
const byte rus_U[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b01111,
  0b00001,
  0b10001,
  0b01110,
  0b00000
};
//Ф
const byte rus_F[8] PROGMEM = {
  0b00100,
  0b01110,
  0b10101,
  0b10101,
  0b10101,
  0b01110,
  0b00100,
  0b00000
};
//Ц
const byte rus_TS[8] PROGMEM = {
  0b10010,
  0b10010,
  0b10010,
  0b10010,
  0b10010,
  0b10010,
  0b11111,
  0b00001
};
//Ч
const byte rus_CH[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b01111,
  0b00001,
  0b00001,
  0b00001,
  0b00000
};
//Ш
const byte rus_SH[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b10101,
  0b10101,
  0b10101,
  0b11111,
  0b00000
};
//Щ
const byte rus_SCH[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b10101,
  0b10101,
  0b10101,
  0b11111,
  0b00001
};
//Ъ
const byte rus_tverd[8] PROGMEM = {
  0b11000,
  0b01000,
  0b01000,
  0b01110,
  0b01001,
  0b01001,
  0b01110,
  0b00000
};
//Ы
const byte rus_Y[8] PROGMEM = {
  0b10001,
  0b10001,
  0b10001,
  0b11101,
  0b10011,
  0b10011,
  0b11101,
  0b00000
};
//Ь
const byte rus_myagk[8] PROGMEM = {
  0b10000,
  0b10000,
  0b10000,
  0b11110,
  0b10001,
  0b10001,
  0b11110,
  0b00000
};
//Э
const byte rus_EE[8] PROGMEM = {
  0b01110,
  0b10001,
  0b00001,
  0b00111,
  0b00001,
  0b10001,
  0b01110,
  0b00000
};
//Ю
const byte rus_YU[8] PROGMEM = {
  0b10010,
  0b10101,
  0b10101,
  0b11101,
  0b10101,
  0b10101,
  0b10010,
  0b00000
};
//Я
const byte rus_YA[8] PROGMEM = {
  0b01111,
  0b10001,
  0b10001,
  0b01111,
  0b00101,
  0b01001,
  0b10001,
  0b00000
};
const byte rus_b[8] PROGMEM = {
  0b00011,
  0b01100,
  0b10000,
  0b11110,
  0b10001,
  0b10001,
  0b01110,
  0b00000
};//б
const byte rus_v[8] PROGMEM = {
  0b00000,
  0b00000,
  0b11110,
  0b10001,
  0b11110,
  0b10001,
  0b11110,
  0b00000
};//в
const byte rus_g[8] PROGMEM = {
  0b00000,
  0b00000,
  0b11110,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b00000
};//г
const byte rus_d[8] PROGMEM = {
  0b00000,
  0b00000,
  0b00110,
  0b01010,
  0b01010,
  0b01010,
  0b11111,
  0b10001
};//д
const byte rus_yo[8] PROGMEM = {
  0b01010,
  0b00000,
  0b01110,
  0b10001,
  0b11111,
  0b10000,
  0b01111,
  0b00000
};//ё
const byte rus_zh[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10101,
  0b10101,
  0b01110,
  0b10101,
  0b10101,
  0b00000
};//ж
const byte rus_z[8] PROGMEM = {
  0b00000,
  0b00000,
  0b01110,
  0b10001,
  0b00110,
  0b10001,
  0b01110,
  0b00000
};//з
const byte rus_i[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b10001,
  0b00000
};//и
const byte rus_ii[8] PROGMEM = {
  0b01010,
  0b00100,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b10001,
  0b00000
};//й
const byte rus_k[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10010,
  0b10100,
  0b11000,
  0b10100,
  0b10010,
  0b00000
};//к
const byte rus_l[8] PROGMEM = {
  0b00000,
  0b00000,
  0b00111,
  0b01001,
  0b01001,
  0b01001,
  0b10001,
  0b00000
};//л
const byte rus_m[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10001,
  0b11011,
  0b10101,
  0b10001,
  0b10001,
  0b00000
};//м
const byte rus_n[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10001,
  0b10001,
  0b11111,
  0b10001,
  0b10001,
  0b00000
};//н
const byte rus_p[8] PROGMEM = {
  0b00000,
  0b00000,
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b00000
};//п
const byte rus_t[8] PROGMEM = {
  0b00000,
  0b00000,
  0b11111,
  0b00100,
  0b00100,
  0b00100,
  0b00100,
  0b00000
};//т
const byte rus_f[8] PROGMEM = {
  0b00000,
  0b00000,
  0b00100,
  0b01110,
  0b10101,
  0b01110,
  0b00100,
  0b00000
};//ф
const byte rus_ts[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10010,
  0b10010,
  0b10010,
  0b10010,
  0b11111,
  0b00001
};//ц
const byte rus_ch[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10001,
  0b10001,
  0b01111,
  0b00001,
  0b00001,
  0b00000
};//ч
const byte rus_sh[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10101,
  0b10101,
  0b10101,
  0b10101,
  0b11111,
  0b00000
};//ш
const byte rus_sch[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10101,
  0b10101,
  0b10101,
  0b10101,
  0b11111,
  0b00001
};//щ
const byte rus_tverd_mal[8] PROGMEM = {
  0b00000,
  0b00000,
  0b11000,
  0b01000,
  0b01110,
  0b01001,
  0b01110,
  0b00000
};//ъ
const byte rus_y[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10001,
  0b10001,
  0b11101,
  0b10011,
  0b11101,
  0b00000
};//ы
const byte rus_myagk_mal[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10000,
  0b10000,
  0b11110,
  0b10001,
  0b11110,
  0b00000
};//ь
const byte rus_ee[8] PROGMEM = {
  0b00000,
  0b00000,
  0b01110,
  0b10001,
  0b00111,
  0b10001,
  0b01110,
  0b00000
};//э
const byte rus_yu[8] PROGMEM = {
  0b00000,
  0b00000,
  0b10010,
  0b10101,
  0b11101,
  0b10101,
  0b10010,
  0b00000
};//ю
const byte rus_ya[8] PROGMEM = {
  0b00000,
  0b00000,
  0b01111,
  0b10001,
  0b01111,
  0b00101,
  0b01001,
  0b00000
};//я

приводит к таким ошибкам 


C:\Users\Вячеслав\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp: In member function 'void LCD_1602_RUS::printwc(wchar_t)':

C:\Users\Вячеслав\Documents\Arduino\libraries\LCD_1602_RUS-master\LCD_1602_RUS.cpp:201:38: error: invalid conversion from 'uint32_t {aka long unsigned int}' to 'const void*' [-fpermissive]

       memcpy(rus_, (uint32_t)rus_B, 8);

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mvn77 пишет:

поняли?

Это не мне нужно понимать, а Вам.

Надеюсь, по ссылочке, указанной xDriver сходили?

Поняли?

Если "да" - то этого достаточно, чтобы внести нужную правку.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Не - тут не заработает, ИМХО.

Почему void LCD_1602_RUS::printwc(const wchar_t _chr) ? Почему там const?

mvn77
Offline
Зарегистрирован: 31.03.2017

Вопрос остается открытым. 

mvn77
Offline
Зарегистрирован: 31.03.2017

mykaida пишет:

Не - тут не заработает, ИМХО.

Почему void LCD_1602_RUS::printwc(const wchar_t _chr) ? Почему там const?

wchar_t это вроде как перведенные символы

wchar_t *LCD_1602_RUS::asciiutf8(unsigned char ascii)

b707
Онлайн
Зарегистрирован: 26.05.2017

а вот интересно, чем ссылка то от xDriver так не понравилась? -абсолютно по делу ссылка ... или тем что готового кода не дали, а предложили самому подумать?

Есть такие люди - отсылку в гугль считают оскорблением....  дикари

mvn77
Offline
Зарегистрирован: 31.03.2017

И что там понтового - в альтернативной команде - уже пробовали не раз - не работает. Я тоже отправил по ссылке - обиделись, хотя тоже содержательная.

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

И что там понтового - в альтернативной команде - уже пробовали не раз - не работает.

альтернативно-одренной команде? - работу с флешем на другую плату переписать не можете?

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

Читай текс, а не сранье что твой друг написал... От меня не убудет что забаните, жаль что вопрос топик стартера так никто и не решил, звиздатых развелось больше мыслимого...

раз с 2015г никто не озаботился - значит не особо и нужно. Самое простое - не использовать русские буквы в программах

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

b707 пишет:

mvn77 пишет:

И что там понтового - в альтернативной команде - уже пробовали не раз - не работает.

альтернативно-одренной команде? - работу с флешем на другую плату переписать не можете?

"повелитель" z80, рам от флеш не отличает, ну это и понятно, не было тогда флеш, был магнитоФон.

mvn77
Offline
Зарегистрирован: 31.03.2017

b707 пишет:

mvn77 пишет:

Читай текс, а не сранье что твой друг написал... От меня не убудет что забаните, жаль что вопрос топик стартера так никто и не решил, звиздатых развелось больше мыслимого...

раз с 2015г никто не озаботился - значит не особо и нужно. Самое простое - не использовать русские буквы в программах

Будь по вашему - самое оригинальное решение.... Дальше обсуждать не стоит.

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 - это вы свои сообщения плюсуете? - не тратьте зря время, на нашем форуме эти баллы нигде не учитываются :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

я завтра буду добрый и трезвый. тему почистят. если тебе, мвн77, будет интересно, я объясню, почему русификация китайского 1602 никому не нужна. Какие есть варианты, если кириллица необходима. Ты только спрашивай нормально, без требований и аппеляций к морали.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ребят, да оставте вы его в покое, сам исчезнет.

я думал ни кто не будет отвечать, но он свои посты начал плюсовать, да и править каждые 10 мин..

я решил зафиксить, и тут опять опять понеслось.

b707
Онлайн
Зарегистрирован: 26.05.2017

MVN - ну неужели вы не понимаете, что ведете себя глупо? Пришли на форум и ТРЕБУЕТЕ, чтобы вам кто-то библиотеку переписал? - попробуйте в автосервис придти и потребовать, чтоб вам КПП перебрали... забесплатно... из человеколюбия. А для начала всех слесарей обложите матом покрепче...

Бесплатно я занимаюсь тем кодом, который мне интересен. Чужим кодом забесплатно никакого интреса заниматься нет.

b707
Онлайн
Зарегистрирован: 26.05.2017

xDriver пишет:

ребят, да оставте вы его в покое, сам исчезнет.

да фиг бы с ним, почему б не подискутировать... будет еще выеживаться - выключу форум, пойду телевизор смотреть

mvn77
Offline
Зарегистрирован: 31.03.2017

wdrakula пишет:
я завтра буду добрый и трезвый. тему почистят. если тебе, мвн77, будет интересно, я объясню, почему русификация китайского 1602 никому не нужна. Какие есть варианты, если кириллица необходима. Ты только спрашивай нормально, без требований и аппеляций к морали.

Требований небыло - да и апеляций... Просьба была - в ответ куча говна.... Складывается впечатление что попал на барахолку... Завтра админы почитсят, меня забанят, и правильно сделают - не место таки как я "совкам" среди таких интелектуалов... но ведь вопрос никто не решил - только от "гуру" понты от чайников вопросы... и самое главное завтра - расскажут почему не нужна кирилица - вот оно мне надо....

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

 

Требований небыло - да и апеляций... Просьба была - в ответ куча говна....

ну врать-то зачем? - до твоей "ссылки" никакого говна не было. Тебе отвечали вполне по делу. А что ты их не понял - так это же не проблемы тех, кто отвечал. Если пятилетняя девочка попросит обьяснить устройство телевизора - сможешь?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

нее .. тут по другому надо - 50 летняя бабушка устройство смартфона и принципы програмирования на андроид.

mvn77
Offline
Зарегистрирован: 31.03.2017

b707 пишет:

mvn77 пишет:

 

Требований небыло - да и апеляций... Просьба была - в ответ куча говна....

ну врать-то зачем? - до твоей "ссылки" никакого говна не было. Тебе отвечали вполне по делу. А что ты их не понял - так это же не проблемы тех, кто отвечал. Если пятилетняя девочка попросит обьяснить устройство телевизора - сможешь?

ДруХ - ты пойми проблема не в ссылка не в функциях а втом что надо изменить библиотеку под другую платфоруму - ну напишите что у вас ума не зхватит и закроем тему, так вы же тут разщвели, один ссылки другой 10 тыр...Я понимаю что и как вопрос в другом у меня не хватит заний переписать ее и ваши ссылки я уже давно прошел. Открою вам дикую тайну - проблема не в одном операторе, а в целой платформе...

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

ДруХ - ты пойми проблема не в ссылка не в функциях а втом что надо изменить библиотеку под другую платфоруму - ну напишите что у вас ума не зхватит и закроем тему,

ну почему не хватит то? я знаю STM32, пишу для нее. Без вского хвастовства - я мог бы переписать эту библиотеку. Но нафига?

Это, понимаешь, точно такой же вопрос, как "Мог бы ты подняться на 32 этаж без лифта?" - да, могу. Но не пойду.

mvn77
Offline
Зарегистрирован: 31.03.2017

b707 пишет:

mvn77 пишет:

Ты сам год как увлекаешся - хорошо время есть - видно сразу гуру проснулся год назад. не забудь соловьева посмотреть....

не стесняюсь глупости писать и не обижаюсь, когда на них указывают.

А что касается времени - его всегда нет. Меньше на диване лежи...

не поверишь - работаю на трех работах... мы савки такие… Лежать некогда. Сегодня, замело дороги, никуда не выехал, ради развлечения поставил новое ардуино, что бы попробовать программу написанную для прибора который несколько лет мне шлет данные в автономном режиме, а она не откомпилилась, и вот стал проверять библиотеки, и наткнулся на эту которая не запустилась у меня и в прошлый раз... Хоть и никто никогда нt видел PRIVET находящийся далеко в металлическом ящике но для души все равно хочется на родном языке… А столкнулся с кучей говна от «!совков»

 

mvn77
Offline
Зарегистрирован: 31.03.2017

Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.

ну а кто ж тебя знает, до какого ты этажа? может и дошел бы, если б не тратил время на пустую болтовню.

А на что ты рассчитывал, что тебя на 32 этаж кто-то понесет? - не, идти придется самому, мы только направление можем показать.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

господа! я нажрался валокордина и спать. ещё и кислородный аппарат включу. стар я стал мудаков терпеть. сердце заходиться начинает.
..........
финальная попытка: кириллица нужна, если ты что-то делаешь под заказ. и тогда бери МЭЛТ с кириллицей или графический дисплей. в остальных случаях это баловство. эта библиотека - страх и ужос.
2. переписать библиотеку это не помощь. но про это тебе написали уже.

mvn77
Offline
Зарегистрирован: 31.03.2017

По поводу wdrakula я неготвино отношусь что людей постоянно обижает - его коронная фраза Я тут сегодня в филосовском настроении, когда нужно много чего делать, но конкретно ничего не хочется. ;) Все об нем говорит, трындит много но никому еще не помог, но ждет поклонение за кол-во постов не в тему - вот такие и гробят форумы и желание людей к новому.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

mvn77 пишет:

Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.

ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.

mvn77
Offline
Зарегистрирован: 31.03.2017

wdrakula пишет:
господа! я нажрался валокордина и спать. ещё и кислородный аппарат включу. стар я стал мудаков терпеть. сердце заходиться начинает. .......... финальная попытка: кириллица нужна, если ты что-то делаешь под заказ. и тогда бери МЭЛТ с кириллицей или графический дисплей. в остальных случаях это баловство. эта библиотека - страх и ужос. 2. переписать библиотеку это не помощь. но про это тебе написали уже.

Так какого хрена ты об этом написал через 50 постов - сразу с этого иначинать надо было а не ссылки давать - для меня это баловство, уровень проблемы я заню сам и когда мне начинают ссылки давать получают ссылки в ответ. Если бы мне для комерции я бы поставил 328ю, которых валом валяется без дела, но я не комерс а любитель, ковыряю потихоньку STMку... Спросил - меня послали - я послал в ответ - обиделись...

mvn77
Offline
Зарегистрирован: 31.03.2017

xDriver пишет:

mvn77 пишет:

Ну если это сравноимо с поднятием на 32 этахж - нахрен ссылки спрашивается давать - поэтому я и ответил. - Нет заинтересованных кто выше 32го то и закрваем тему, зачем ссылками то тыкать тому кто и до 10го не дойдет.

ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.

Так в том и фишка - мне помгать незачем... Оно мне не надо - я поддержал топик... То что я разробатывал давно работает, и доступа даже к нему нет. А код который писал тогда сегодня и сам не везде понять могу, потому что с тех пор нинаписал ни строчки. Но всетаки хочется что бы в РУНЕТЕ была своя библиотека под вывод русских символов для блю пилюль на китайских дисплеях))) Да и для комерции я бы написал через постоянное перепрошивание запасных символов.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

хорошо, давай конструктивно.

я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy

 

mvn77
Offline
Зарегистрирован: 31.03.2017

Ладно !совки - спокойной ночи....

mvn77
Offline
Зарегистрирован: 31.03.2017

xDriver пишет:

хорошо, давай конструктивно.

я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy

 

тем что работает с основной памятью....

b707
Онлайн
Зарегистрирован: 26.05.2017

xDriver пишет:

ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.

да не, неправильно ты пишешь. Причина-то не в гоноре. А то сейчас подумает, что мы тут сидим его воспитываем.

Нет, даже если б он пришел и очень вежливо попросил - все равно никто б библиотеку переписывать не стал бы. Просто потому что это серьезная работа и ненормально просить ее бесплатно. Пример - Какие бы у вас не были замечательные отношения с соседом, но если это не ближайший друг - вряд ли вы согласитесь перекапывать ему огород бесплатно. Почему-то очень многие из тех, кто все понимает с огородом - уверены, что программу написать - это не работа, просто по клавишам постучать и все :)

mvn77
Offline
Зарегистрирован: 31.03.2017

b707 пишет:

xDriver пишет:

ты действительно не понимаешь, что каждый из оппонирующих тебе тут может переписать/исправить этот код под стм, но мотивации это делать - нет. а помогать тебе, с твоим гонором, нет мотивации от слова - совсем.

да не, неправильно ты пишешь. Причина-то не в гоноре. А то сейчас подумает, что мы тут сидим его воспитываем.

Нет, даже если б он пришел и очень вежливо попросил - все равно никто б библиотеку переписывать не стал бы. Просто потому что это серьезная работа и ненормально просить ее бесплатно. Пример - Какие бы у вас не были замечательные отношения с соседом, но если это не ближайший друг - вряд ли вы согласитесь перекапывать ему огород бесплатно. Почему-то очень многие из тех, кто все понимает с огородом - уверены, что программу написать - это не работа, просто по клавишам постучать и все :)

Так о том и речь - я с высоты своих 10 этажей не вижу всего обьема проблемы - вы же видели, но начали за место того что бы обьяснить насколько это проблемотично для новичка тыкать меня в ссылки. А это явный признак того что оппонент не желает помгогать либо просто издевается...

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

Так в том и фишка - мне помгать незачем... Оно мне не надо - я поддержал топик... То что я разробатывал давно работает, и доступа даже к нему нет.

ну вот... пошло хвастанье старыми заслугами. Ту уж определись - ты до десятого этажа дойти не можешь, или все можешь, но гордый как орел...

старый, уж не бреши. Ты пришел клянчить программу и не надо теперь вилять.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

mvn77 пишет:

xDriver пишет:

хорошо, давай конструктивно.

я дал ссылку на определение функции memcpy_PF, ты понял чем она отличается от простой memcpy

 

тем что работает с основной памятью....

тогда действительно, спокойной ночи, "повелитель" z80.

в атомобильных терминах - я тебя спрашиваю - где находится фильтр? логичный ответ - какой ?

ты мне овечаешь - взади...

b707
Онлайн
Зарегистрирован: 26.05.2017

mvn77 пишет:

тыкать меня в ссылки. А это явный признак того что оппонент не желает помгогать либо просто издевается...

тыкать в ссылки - признак издевательства? - так может думать только полный идиот.

А умным ссылки помогают. Даже если с твоего уровня они пока не понятны - сохрани на будущее, может когда поймешь.