Автор | Сообщение |
|
Отправлено: 14.12.20 18:11. Заголовок: Проблема с UTF в NVRAM
Здравствуйте! Вот такое вот объявление, само по себе, еще даже до обращения к массиву в программе: #ENCODING_UTF16 NONVOLATILE STRING Name_Str_NVRAM[110][64]; приводит после прошивки, и затем дальнейших штатных перезагрузок процессора к ошибкам в лог-файле: "# SIMPL+: Could not load all variables from NVRAM. Variables could be incorrect" Контроллер RMC3, прошивка предпоследняя, без триального Crestron ONE. Если убрать #ENCODING_UTF16, то все на первый взгляд нормально (во всяком случае ошибка в логе исчезает), но тогда с данными не понятно что делать - мне нужно запоминать до 110 строк русских названий, поступающих по массиву входных линий в модуль, по одной строке. Строки следуют не быстро, примерно через 0.5 сек. каждая. В отладчике видно, что строка приходит целиком. Кстати, несмотря на ошибку с #ENCODING_UTF16, программа почти работает, только почему-то в первых 55 элементах содержатся правильные строки, а остальные элементы пустые, хотя делается попытка занести данные во все 110 элементов массива. Пробовал уменьшить размерность, но даже Name_Str_NVRAM[2][64] с UTF вызывает Could not load all variables from NVRAM. Variables could be incorrect. Как вариант, можно попробовать сохранять строки в файл, имел опыт работы с конфигами (латиницей) в NVRAM. Интересно, вывод в файл построчно UTF строк сработает, как думаете?
|
|
|
Ответов - 5
[только новые]
|
|
|
Отправлено: 16.12.20 09:44. Заголовок: Вот я пытался русски..
Вот я пытался русский текст и в файл, и в NVRAM писать, на выходе всегда вопросы были. Длина одинаковая. При чем в самой логике в переменной типа стринг русский сохраняется и нормально вызывается, а если вызывать из памяти, то тю-тю.
|
|
|
|
Отправлено: 16.12.20 09:55. Заголовок: всё что не ASCII 128..
всё что не ASCII 128бит - боль и страдания... и похоже это никак не меняется с годами :( 3 серия по определению UTF16 из-за C#, но из-за взятой за основу и навешанных костылей софтово/модульно (для совместимости с прошлым веком) 2 серию с ASCII, вечно вылазят косяки
|
|
|
|
Отправлено: 16.12.20 10:11. Заголовок: Добрый день! А нет..
Добрый день! А нет ли у Вас версии, почему первые 55 элементов массива Name_Str_NVRAM[110][64] в UTF16, из 110 элементов всего, сохраняются и выводятся в Xpanel нормально, а элементы 56-110 при считывании выводятся в отладчике как пустые? Какая-то мысль крутится в голове, но никак не могу ее оформить. Будет сегодня время, попробую сделать типа контрольных точек побольше в программе, или может выгрузить все содержимое NVRAM (не диск!), это кажется через File Manager можно сделать ? P.S. Кстати, вспомнил - пробовал делать массив меньше: Name_Str_NVRAM[55][64] - примерно первая половина элементов работает нормально, во второй половине - сбой. И вот тут я не уверен, что работали 25 элементов. Кажется, 28 элементов работали нормально, но это не точно. Точно, что во второй половине был сбой. И еще - раньше я писал в NVRAM UTF-16 вот так: "ToASCII(Input_Str); // Convert from UTF16 - then correct store in NVRAM", нашел в старой программе. Без этого пару лет назад не работало. Сейчас все и без этого как бы сохраняется и вызывается, но куда девается примерно половина - не понятно.
|
|
|
|
Отправлено: 16.12.20 10:25. Заголовок: ну он либо пишет оди..
ну он либо пишет один из двух байт, либо читает один из двух (ASCII 1 байт/UTF16 2 байта) смахивает на какой то косяк с внутренней реализацией ковертов
|
|
|
|
Отправлено: 20.12.20 19:28. Заголовок: Вам еще повезло, что..
Вам еще повезло, что много строк влазит в NVRAM. Я давно уже наступил на эти грабли. NVRAM в пределах одного модуля simpl+ стал иметь весьма серьезные ограничения по объему сохраненных данных. Доходило до того ,что разбивал на разные модули по 2 строки в каждом (не помню точно по сколько символов, но не суть). Все что больше при перезагрузке терялись. Потом забил на этот бред и стал хранить в файле. Проблемы ушли. По кодировке затрудняюсь сказать, но названия хранил и русские в том числе, с этим проблем не было. Ну и сразу скажу, удобнее сохранять сразу структуру/массив структур. А потом её/их читывать. Со считывание массива структур прямо скажем по хэлпу было ни разу не понятно. Но на телеграмм канале, подсказали как делать и всё получилось. Задача в моем случае была, сохранить IPадрес, MACадрес, Название устройства Теперь ждем проблем когда SD карта затрется
|
|
|
|