sonycman 0 22 ноября, 2008 Опубликовано 22 ноября, 2008 · Жалоба Есть функция (в проекте для ИАРа) вида: lcdPrintText(__flash char * text); и её вызoв: lcdPrintText("Some shit"); Как сделать подобное в новом GCC так, чтобы строка распологалась в памяти программ? Компилер упорно грузит её в ОЗУ! Ключевые слова prog_char и PROGMEM совершенно не помогают! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 22 ноября, 2008 Опубликовано 22 ноября, 2008 · Жалоба Как сделать подобное в новом GCC так, чтобы строка распологалась в памяти программ?Прочитать WinAVR/doc/avr-libc/FAQ.html? Ключевое слово PSTR(), но прочитать FAQ нужно от начала до конца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 22 ноября, 2008 Опубликовано 22 ноября, 2008 · Жалоба Спасибо за наводку. Буду штудировать! :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 22 ноября, 2008 Опубликовано 22 ноября, 2008 · Жалоба Спасибо за наводку. Буду штудировать! :-)Читай между строк:) Таким способом можно сильно повысить читаемость кода void lcd_print_str (unsigned char x, unsigned char y, char* p); // print RAM str void lcd_print_cstr (unsigned char x, unsigned char y, const char* p); // print FLASH str #define lcd_print_PSTR(X,Y,LCDPSTR) lcd_print_cstr(X,Y,PSTR(LCDPSTR)) // put str in to FLASH and then print Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 (изменено) · Жалоба Не хотелось плодить тем, поэтому напишу прямо сюда. В общем проект создан на C++. Не пойму в чем дело, компилятор не хочет компилировать заголовки классов в h-файлах. Яр эту конструкцию кушает нормально. В чем может быть дело? Изменено 3 декабря, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба В общем проект создан на C++. Не пойму в чем дело, компилятор не хочет компилировать заголовки классов в h-файлах. Яр эту конструкцию кушает нормально. В чем может быть дело? Судя по всему он не понял слова class. Значит, он компилирует в режиме С, а не С++. Какое расширение имеет ваш файл (должен иметь .cpp)? Покажите командную строку компилятора - может там принудительно задан режим С. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба Судя по всему он не понял слова class. Значит, он компилирует в режиме С, а не С++. Какое расширение имеет ваш файл (должен иметь .cpp)? Покажите командную строку компилятора - может там принудительно задан режим С. Расширение файла правильное - cpp. Где эту строчку можно посмотреть? На всякий случай положу майкфайл. Makefile.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба Расширение файла правильное - cpp. Где эту строчку можно посмотреть?На прикрепленной вами картинке есть вкладка Console. Откройте ее, там же будут и более подробные сообщения об ошибке. На всякий случай положу майкфайл. Вижу в нем два С-файла: SRC = Rc6\Rc6.c SRC += Fldr\Fldr.c Вы уверены, что Trg.h не включен (возможно косвенно) в один из этих файлов? В консоли вы увидете, при компиляции какого именно файла подключился этот заголовок. Еще вижу у вас сообщение, что Эклипса не может найти генератор инфо. Зайдите в Project->Options->C/C++ Build->Discovery options и в поле Compiler invokation command впишите arm-elf-gcc.exe вместо gcc.exe. Увидите много полезного, в частности - в окне Outline P.S. Не хотелось плодить тем, поэтому напишу прямо сюда.Напрасно. Оно совсем с темой топика не коррелирует. Может кто-то из модераторов отделит это обсуждение в отдельную ветку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 (изменено) · Жалоба На прикрепленной вами картинке есть вкладка Console. Откройте ее, там же будут и более подробные сообщения об ошибке. Вот консоль. Assembling (ARM-only): crt0.S arm-elf-gcc -c -mcpu=arm7tdmi-s -I. -x assembler-with-cpp -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__ -Wa,-adhlns=crt0.lst,-gdwarf-2 crt0.S -o crt0.o Compiling C: Rc6\Rc6.c arm-elf-gcc -c -mcpu=arm7tdmi-s -I. -gdwarf-2 -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswitch -ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=Rc6\Rc6.lst -ICommon/inc -Wcast-qual -MD -MP -MF .dep/Rc6.o.d -Wnested-externs -std=gnu99 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations Rc6\Rc6.c -o Rc6\Rc6.o In file included from Rc6\/..\includes.h:30, from Rc6\Rc6.c:5: Rc6\/..\/Target\Trg.h:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'LPCTARGET' Rc6\/..\/Target\Trg.h:71: warning: data definition has no type or storage class Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'TARGET' Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'pTARGET' make: *** [Rc6\Rc6.o] Error 1 Вижу в нем два С-файла: SRC = Rc6\Rc6.c SRC += Fldr\Fldr.c Вы уверены, что Trg.h не включен (возможно косвенно) в один из этих файлов? Подключены через один глобальный файл! Этого я не знал. Всегда делал так в одном глобальном файле прописывал все инклюды и потом его уже цеплял во всех исходниках. При этом IAR игнорировал слова C++ и выдавал ошибки, если этот класс непосредственно был использован. А можно ли сделать и здесь сделать игнорирование? Еще вижу у вас сообщение, что Эклипса не может найти генератор инфо. Зайдите в Project->Options->C/C++ Build->Discovery options и в поле Compiler invokation command впишите arm-elf-gcc.exe вместо gcc.exe. Увидите много полезного, в частности - в окне Outline Исправил P.S. Напрасно. Оно совсем с темой топика не коррелирует. Может кто-то из модераторов отделит это обсуждение в отдельную ветку? Согласен, вопрос разросся. Изменено 3 декабря, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба А можно ли сделать и здесь сделать игнорирование?Самый простой путь - заключить "плюсовые" определения или #include этого файла в #ifdef __cplusplus .... #endif Но грамотнее, конечно, включать плюсовые заголовки только в плюсовые файлы или перевести Сишные исходники на плюсы. Или попробуйте просто переименовать Rc6.c в Rc6.cpp - может он скомпилится в плюсовом режиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба Самый простой путь - заключить "плюсовые" определения или #include этого файла в #ifdef __cplusplus .... #endif Но грамотнее, конечно, включать плюсовые заголовки только в плюсовые файлы или перевести Сишные исходники на плюсы. Или попробуйте просто переименовать Rc6.c в Rc6.cpp - может он скомпилится в плюсовом режиме. В общем поменял расширение Rc6.c на cpp. Помогло. Этот вариант мне подходит. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться