реклама на сайте
подробности

 
 
> Дополнительный препроцессор для GCC
ARV
сообщение Nov 15 2009, 16:11
Сообщение #1


Профессионал
*****

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



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

как это сделать правильно? и как это затем "интегрировать" в Eclipse, который генерирует make-file самостоятельно?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Nov 17 2009, 06:31
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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 перезаписывается автоматом и все...

утилитку свою прилагаю к сообщению. и очень жду советов по ситуации...
Прикрепленные файлы
Прикрепленный файл  lcd_conv.rar ( 50.25 килобайт ) Кол-во скачиваний: 29
 


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 17 2009, 08:31
Сообщение #3


Начинающий профессионал
*****

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



Цитата(ARV @ Nov 17 2009, 09:31) *
но вот AVR Studio или Eclipse генерируют makefile самостоятельно, на лету строя его из различных "визуально заданных" параметров проекта.

А кто мешает написать свой makefile и подсунуть и AVR Studio, и Eclipse? Сергей Борщ про это уже писал и я неоднократно поддакивал biggrin.gif .
Если утилита командной строки (не смотрел ее), то все в makefile ложится легко, для облегчения отладки сделайте для утилиты отдельную цель, эту цель добавьте в правила сборки проекта.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ARV
сообщение Nov 17 2009, 09:12
Сообщение #4


Профессионал
*****

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



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 17 2009, 09:45
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 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 байта таблицы. Зато никаких геморроев с перекодировкамиsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016