Отговори на тема  [ 21 мнения ]  Отиди на страница Предишна  1, 2
Реализация на многоезично меню с PIC чрез HITECH PICC 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
EEEEEEEEEEEEEEEEEE БЛАГОДАРЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
Тръгна да му се не види!!!
Те това е крайния вариант - компилира се без проблеми в HITECH PICC 9.50PL2

const char (*items)[20];

const char it_en[10][20]={ "Str1", "Str2", "Str3"};
const char it_bul[10][20]={"Стр1","Стр2","Стр3"};

items = language? it_bul: it_en;

Много много благодаря отново! Черпенето от мен...


Пон Май 28, 2007 6:46 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Нали се сещаш че при тоя вариант заделя 20 баита за всеки стринг независимо от размера му.
Не е особенно читаво решението. Ако всичките стрингове са долу горе толкова дълги става но рядко е така на практика.


Пон Май 28, 2007 7:17 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Да - това го знам. В конкретния случай от 20 стринга за всеки език само общо 4 са с няколко символа по къси. За сега обаче това е единствения работещ вариант. Ще продължа да пробвам решение със стринговете. Интересното в случая е защо не става както за PC, като се има в предвид че там съм го правил много пъти и на поне 4 различни компилатори. Никога не е имало проблеми. Освен това е описано че точно така трябва да се прави на C - тоест по стандарт си е. Странна работа...


Пон Май 28, 2007 9:27 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Щото имаш 2 типа памети в пика. Оттам се усложняват нещата. В процесорите с единно адресно простанство си работи твоя вариант. Макар че и за там не е особено читав защото не си указал че стринговете са константи.
За PC може да не ти пука че компилатора не оптимизира добре и така да го оставиш но за малък процесор винаги трябва да се изразяваш вярно.
При пика трябва да укажеш съвсем стриктно кое е константа. Нещо от типа на това което ти дадох за пример е вярното решение при Hi-Tech. Но трябва внимателно да прегледаш какво е натворил като асемблер и ако трябва да поразместиш това онова,някоя скобка да сложиш докато сътвори вярно решения. С една дума малко шаманство :) Поне с по старите версии с които работих преди почти винаги при по сложно изразяване следваха проблеми,макар и от гледна точка на C да си е съвсем правилно.


Пон Май 28, 2007 9:55 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Сложих си един Proteus, запретнах ръкави и... - май намерих решението на проблема - по начина по който ТРЯБВАШЕ да стане.

Решение номер 1: - стария работещ вариант - с единствения недостатък, че масивите не са от стрингове - а са масиви от символи - и заделяната памет е еднаква за всеки ред от масива - независимо от броя символи в него.
//============================================
const char (*items)[20];
const char it_en[10][20]={ "Str1", "Str2", "Str3"};
const char it_bul[10][20]={"Стр1","Стр2","Стр3"};
items = language? it_bul:it_en;
=============================================

Решение номер 2: - е това трябва да е БАШ варианта. Към това се стремях още от началото - ама голямо търсене падна де. За момента не съм открил странични ефекти някакви.
//============================================
const char * const * items;
const char * const it_en[10] = { "Str1", "Str2", "Str3"};
const char * const it_bul[10] = {"Стр1","Стр2","Стр3"};
items = language? it_bul:it_en;

=============================================

И при двата варианта след това в програмата си ползваш items[0], items[1] и т.н. за съответния стринг от масива. От кой масив идва стринга зависи само от това - към кой масив е насочен указателя. Та това е всичко май...

Благодаря на Никола Киров и на всички отзовали се по темата!

!!! Има и още!
Открих че противно на очакваното при приблизително еднакво дълги стрингове - първия вариант дава ПО-КОМПАКТЕН код - и разликата не е хич малка - при процесор с 4k ROM и налични около 40 стринга от по 16 символа - разликата е около 4%. Та май винаги трябва да се има по едно наум...


Пон Май 28, 2007 10:13 pm
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Окт 31, 2005 2:40 am
Мнения: 8
Мнение 
ако някои може да сподели някаква литература ( под формата на линкове или др. ) как може да се реализира меню на PIC бих бил благодарен :)
Не съм много наясно,но може да ми се наложи да реализирам нещо такова и затова да съм подготвен


Вто Май 29, 2007 1:24 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 21 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни