|
Дополнительный препроцессор для GCC |
|
|
|
 |
Ответов
|
Nov 17 2009, 06:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
что-то нет ответов-советов... может, я недостаточно понятно изложил свою мысль? попробую пояснить. дано: жидкокристаллический символьный индикатор типа WinStar 1602, знакогенератор которого содержит только расположенные в не поддающемся логике порядке символы русских букв, начертание которых не совпадает с английскими. то есть, символ ' к' в его знакогенераторе есть, а символа ' К' нет, т.к. его начертание совпадает с английской заглавной буквой K. и так далее. проблема: разрабатываем программу для AVR, желаем вывести на индикатор " Привет, Мир!". если сделать это непосредственно, окажется, что на индикаторе полнейший бред, а не текст, потому что кодировка русских букв в редакторе Win-1251 (соответственно, и в прошивку они попадают в этой кодировке), а у индикатора кодировка извратная. существуют разные утилиты, которые конвертируют строки и позволяют вставить прямо в текст программы что-то типа " \240\239\168е\253", но это очень неудобно, т.к. в таком формате даже не понятно, что именно выводится - надо лепить комменты всякие и т.п. задача: сделать (уже сделал) утилиту, которая просмотрит исходный текст (выбранный или все подряд), найдет все строковые константы в нем и проведет преобразование кодов русских символов в этих строках, после чего передаст результирующий файл для компиляции вместо исходного. таким образом, получаем редактирование в удобной для человека кодировке, а компиляцию - в кодировке, соответствующей знакогенератору ЖКИ. я так понимаю, что поставленная задача по сути соответствует препроцессору, отсюда и тема вопроса. какой вопрос возникает у меня. допустим, утилитка конвертирует main.c в main1.c. как подсунуть main1.c вместо указанного в проекте main.c? в принципе, если makefile правится ручками, то особых проблем не возникает (хотя лично для меня это не совсем так - но это не главное в данный момент), но вот AVR Studio или Eclipse генерируют makefile самостоятельно, на лету строя его из различных "визуально заданных" параметров проекта. Вот и получается, что вручную вписать строчку в этом случае не получается: makefile перезаписывается автоматом и все... утилитку свою прилагаю к сообщению. и очень жду советов по ситуации...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Nov 17 2009, 08:31
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(ARV @ Nov 17 2009, 09:31)  но вот AVR Studio или Eclipse генерируют makefile самостоятельно, на лету строя его из различных "визуально заданных" параметров проекта. А кто мешает написать свой makefile и подсунуть и AVR Studio, и Eclipse? Сергей Борщ про это уже писал и я неоднократно поддакивал  . Если утилита командной строки (не смотрел ее), то все в makefile ложится легко, для облегчения отладки сделайте для утилиты отдельную цель, эту цель добавьте в правила сборки проекта.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Nov 17 2009, 09:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(mdmitry @ Nov 17 2009, 11:31)  А кто мешает написать свой makefile и подсунуть и AVR Studio, и Eclipse? Сергей Борщ про это уже писал и я неоднократно поддакивал  . Если утилита командной строки (не смотрел ее), то все в makefile ложится легко, для облегчения отладки сделайте для утилиты отдельную цель, эту цель добавьте в правила сборки проекта. никто не мешает  просто есть два подхода в сборке проектов: через хитрую правку makefile и через щелканье мышкой по разным опциям в GUI. мне как-то ближе второй подход, ради чего и использую Eclipse. хочется в том же ключе и с этой задачей справиться
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Nov 17 2009, 09:45
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Я понимаю, что мой совет немного не по теме, но. Код // LCD translation table const unsigned char TransTable[] = { 0x41,0xA0,0x42,0xA1,0xE0,0x45,0xAB,0xA4,0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8, 0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,0xAC,0xE2,0xAD,0xAE,0x62,0xAF,0xB0,0xB1, 0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE, 0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7 };
void lcd_putchar(char ch) { if (ch >= 'А') // русская большая "А" { #ifdef CP866 // исходные строки в DOS-кодировке if (ch <= 'п') ch = TransTable[(ch - 'А')]; // русские маленькая "П" и большая "А" else ch = TransTable[(ch - 'А' - ('р' - 'п') + 1)]; // тоже русские "р", "п" и "А" #else // исходные строки в WIN-1251 ch = TransTable [(ch-'А')]; #endif } lcd_putbyte(ch); }
void lcd_puts(char *s) { while(*s) lcd_putchar(*s++); }
int main() { lcd_puts("Привет!"); } Накладные расходы - 64 байта таблицы. Зато никаких геморроев с перекодировками
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
ARV Дополнительный препроцессор для GCC Nov 15 2009, 16:11 mdmitry Цитата(ARV @ Nov 15 2009, 19:11) возникла... Nov 15 2009, 19:08    Laksus Цитата(AHTOXA @ Nov 17 2009, 12:45) Я пон... Feb 20 2011, 16:28   klen вообщето истинно правильный способ - не использова... Nov 17 2009, 09:52 ARV ну разумеется, столь очевидные вещи, как runtime-п... Nov 17 2009, 10:13 mdmitry Цитата(ARV @ Nov 17 2009, 13:13) что каса... Nov 17 2009, 10:40 klen 2_Zltigo
Зря Вы свой пост сразуже удалили..
там... Nov 17 2009, 10:45  mdmitry Цитата(klen @ Nov 17 2009, 13:45) 2_Zltig... Nov 17 2009, 10:59  ARV Цитата(klen @ Nov 17 2009, 13:45) процес ... Nov 17 2009, 13:19   klen Цитата(ARV @ Nov 17 2009, 16:19) да не уш... Nov 17 2009, 17:15 dxp Цитата(ARV @ Nov 17 2009, 16:13) что каса... Nov 18 2009, 06:39 _Pasha Цитата(ARV @ Nov 17 2009, 14:13) что каса... Nov 18 2009, 06:52  ARV Цитата(_Pasha @ Nov 18 2009, 09:52) В люб... Nov 18 2009, 08:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|