Полная версия этой страницы:
Code::Blocks -> How To
MrYuran
Nov 26 2008, 07:46
Внизу есть вкладка Build Log, в неё можно вывести подробный лог со всеми командами, ключами и т.д. и даже сохранить его в файл. В настройках где-то есть соответственная галка.
Вот пример:
Нажмите для просмотра прикрепленного файлаА вот нужные галки:
Нажмите для просмотра прикрепленного файла
Григорий2000
Nov 26 2008, 08:55
Да, спасибо, уже нашел где это включить...
и, как оказалось, линкеру передаются все файлы. Однако, немогу понять во первых почему линкуется другим файлом, обычно компилер и линкер - один и тот-же файл
Цитата
avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c ds18b20.c -o obj\Debug\ds18b20.o
avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c main.c -o obj\Debug\main.o
avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c 1WIRE.C -o obj\Debug\1WIRE.o
avr-g++.exe -Lobj\Debug -Lobj\Debug\Lib -LC:\WinAVR\avr\lib -o bin\Debug\testProject.elf obj\Debug\DELAY.o obj\Debug\buffer.o obj\Debug\ds18b20.o obj\Debug\main.o obj\Debug\1WIRE.o -mmcu=atmega128 -Wl,-Map=bin\Debug\testProject.elf.map,--cref
obj\Debug\ds18b20.o: In function `ds1820StartConversion':
C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset'
C:\work\TestFolder\testProject/ds18b20.c:157: undefined reference to `w1_command'
C:\work\TestFolder\testProject/ds18b20.c:160: undefined reference to `w1_command'
obj\Debug\ds18b20.o: In function `ds1820ReadTemperature':
C:\work\TestFolder\testProject/ds18b20.c:199: undefined reference to `w1_reset'
C:\work\TestFolder\testProject/ds18b20.c:209: undefined reference to `w1_bit_io'
C:\work\TestFolder\testProject/ds18b20.c:218: undefined reference to `w1_reset'
C:\work\TestFolder\testProject/ds18b20.c:247: undefined reference to `w1_command'
C:\work\TestFolder\testProject/ds18b20.c:254: undefined reference to `w1_byte_rd'
C:\work\TestFolder\testProject/ds18b20.c:255: undefined reference to `w1_byte_rd'
obj\Debug\ds18b20.o: In function `ds18b20Init':
C:\work\TestFolder\testProject/ds18b20.c:91: undefined reference to `w1_rom_search'
Process terminated with status 1 (0 minutes, 1 seconds)
10 errors, 0 warnings
и в принципе видно, что проблема только в этом файле.
Интересен порядок использования файлов.
изменение линкера результата не дало...
проблема где-то в моих проектах,
на тестовом проекте работает нормально
kurtis
Nov 26 2008, 12:38
Небольшой вопрос.
Возможно ли чтоб по нажатию кнопки Run осуществлялось программирование контроллера?
Сейчас я прошиваю контроллер через макрос в makefile ( т.е. в консоли пишу make prog, где prog это имя макроса ). Частично решил проблему с помощью Tools -> Configure tools... , но там нельзя назначить сочетания клавиш для автоматического запуска, да и кнопка Run оказалась незадействованной.
Привет, Григорий2000!
Цитата(Григорий2000 @ Nov 26 2008, 13:55)

Код
C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset'
Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm?
Григорий2000
Nov 26 2008, 18:55
Цитата(alx2 @ Nov 26 2008, 21:27)

Привет, Григорий2000!
Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm?
уверен на 220%
я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество)
msalov
Nov 27 2008, 06:58
Цитата(Григорий2000 @ Nov 26 2008, 20:55)

уверен на 220%
я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество)
Ответ тут получается очень простым.
Если вы используете функции написанные на С в программе на С++, то её (функцию) необходимо обьявить как
extern "C". Это всё надо так как компилятор С++ добавляет префиксы и постфиксы к именам всех функций что б различать перегруженные, а компилятор С - нет (как это называется по научному - извините не помню).
Универсальный подход к такому вопросу такой: во все заголовочные файлы добавляйте такие макросы
Код
#ifndef SOME_HEADER_H
#define SOME_HEADER_H
#ifdef __cplusplus
extern "C" {
#endif
// тут обьявлены функции
#ifdef __cplusplus
}
#endif
#endif //SOME_HEADER_H
nm утилита из набора binutils для вывода всех символов, обьявленных в обьектном файле, например
Код
nm ds18b20.o
выдаст список всех имён функций и не только в этом файле. Если вы откомпилируете один и тот же исходник компилятором С и С++, и посмотрите на имена функций - поймете разницу и почему линкер не находил функций.
MrYuran
Nov 27 2008, 07:56
А линкер-то g++ используется или gcc?
Цитата
avr-g++.exe -Lobj\Debug -Lobj\Debug\Lib -LC:\WinAVR\avr\lib -o bin\Debug\testProject.elf obj\Debug\DELAY.o obj\Debug\buffer.o obj\Debug\ds18b20.o obj\Debug\main.o obj\Debug\1WIRE.o -mmcu=atmega128 -Wl,-Map=bin\Debug\testProject.elf.map,--cref obj\Debug\ds18b20.o: In function `ds1820StartConversion':
Григорий2000
Nov 27 2008, 09:05
C выводом обьявлений функций как
#ifdef __cplusplus
extern "C" {
#endif
все успешно линкуется.
незапоминаю решения в котрых непонятен принцип действия.
С этим ответом встало все на свои места...
используется линкер g++(поумолчанию)
_Pasha
Dec 18 2008, 00:15
Вот не могу понять. Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr. Наблюдаю в окне build вместо файла. Блин, мозг сломал... не понимаю Подскажите, плз, что делать.
AHTOXA
Dec 18 2008, 06:18
objdump 2>&1 тоже не помогает?
_Pasha
Dec 18 2008, 08:47
Не помогает
Цитата(_Pasha @ Dec 18 2008, 05:15)

Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr.
У меня objdump выводит в stdout (binutils-2.18). Видимо, перенаправление вывода у тебя делает сабж.
_Pasha
Dec 18 2008, 16:33
Очевидно, да, потому что objcopy ведь справляется со своей работой.
Более подробно: проект под AVR, запускаю objdump в post-build.
AHTOXA
Dec 18 2008, 20:12
Чудеса

Сейчас под рукой нет c::b, потому могу дать только идеологический совет - пользовать custom makefile. В этом случае всё в руках разработчика, и значительно проще переключаться между различными семействами МК.
AHTOXA
Dec 19 2008, 05:52
Придумал

Надо написать bat-файл с вызовом avr-objdump, и его прописать в post-build. Вроде работает.
_Pasha
Dec 19 2008, 12:31
Цитата(AHTOXA @ Dec 19 2008, 00:12)

могу дать только идеологический совет - пользовать custom makefile.
Видимо, такида. Дырявые эти расцветастые плагины.
Вот еще одну багу нашел (опять же AVR):
1. Создали проект.
2. Походу решили поменять девайс.
Результат: в компилере - то мы поменяли все, а в опциях линкера девайс остался старый, который прописан при создании проекта. И к опциям нет доступа. Только через редактирование ручками *.cbp
Такой хоккей нам не нужен (Ц)
MrYuran
Dec 19 2008, 13:10
Цитата(_Pasha @ Dec 19 2008, 15:31)

в опциях линкера девайс остался старый, который прописан при создании проекта. И к опциям нет доступа. Только через редактирование ручками *.cbp
Как это?
Project -> Properties -> Кнопочька "Project's Build Options"
Выбираете любые ключи, флаги, кристаллы и т.д.
Правда, я под МСП, без визарда, но через имеющийся интерфейс к MSPGCC
Нажмите для просмотра прикрепленного файла
Цитата(AHTOXA @ Dec 19 2008, 10:52)

Надо написать bat-файл с вызовом avr-objdump, и его прописать в post-build. Вроде работает.
Вроде непонятно, почему работает. Если просто вызов одной команды заменен на вызов другой, то почему вывод первой сабж перенаправлял в stderr, а вывод второй перенаправлять не стал?
_Pasha
Dec 19 2008, 15:33
Цитата(MrYuran @ Dec 19 2008, 17:10)

Как это?
Опять же, не забудьте - AVR. Может, в других случаях и не так.
Этими галочками можно поменять камень только для компилятора. Для линкера - надо отдельно полезть на его вкладку и прописать там ключик.
Цитата
И к опциям нет доступа
Это я немного приврал

- с непривычки запутался в release/debug.
AHTOXA
Dec 19 2008, 19:49
Цитата(alx2 @ Dec 19 2008, 19:18)

Вроде непонятно, почему работает. Если просто вызов одной команды заменен на вызов другой, то почему вывод первой сабж перенаправлял в stderr, а вывод второй перенаправлять не стал?
Я может не совсем внятно выразился. Создаём файл make-list.bat, в нём
Код
avr-objdump -h -S proj.elf > proj.lss
После этого c::b вызывает его, скажем так:
Код
make-list.bat &1>2
Но теперь это совсем не мешает перенаправлению в файл внутри батника

ЗЫ. Имена файлов можно передавать как параметры, для гибкости.
Terrabyte
Jan 13 2009, 13:32
Здравствуйте, с 2009 годом всех !
Сейчас в основном работаю с fujitsu и с ARM. Хотел подобрать для себя графический редактор, потому как сложно переключится с IARa(ARM) на softune, в связи с этим вопрос, кто-нибудь применял Code::Blocks и softune? будет ли дисасемблер работать?
AHTOXA
Jan 13 2009, 20:46
Дизассемблер - вряд ли. А в качестве удобного редактора - c::b вполне можно применить с компилятором softune.
Пример проекта и makefile прилагаю.
Нажмите для просмотра прикрепленного файла
Terrabyte
Jan 15 2009, 14:26
спасибо, пока что небыло времени попробовать C::B, пытался настроить RistanCASE DAC v4.2.83 - в демо версии, понравилась, но больше 4кВ прогу - посылает ..., а по прайсу , если не ошибаюсь, лицензия на этот DAC 700евр. А может кряк у кого есть на DAC последний ? но похоже что симулятор к даку не получится подрубить, а в C::B симулятор softunовский ..настраивается? а про дизассемблер похоже совсем придётся забыть
Terrabyte
Jan 22 2009, 07:42
в C::B удобный editor, это да, но как заставить его компелить через softune? что означает графа Resourse compiler ? как быть с ассемблером fasm907s.exe ? некоторые asm-команды только он может обработать , как быть с fscv907s.exe ? и потом, есть: linker (flnk907s) and the old linker (link907a).. мне кажеьтся что это всё не реально настроить. Может кто знает как шрифт поменять в softune, а то только один fixedsys руский шрифт понимает?
AHTOXA
Jan 22 2009, 20:16
Как настроить Code::Blocks для работы с softune - Запускаем c::b;
- Идём в меню Settings – Compiler and debugger.
- Жмём кнопку «Copy».
- Вводим имя нового компилятора: «Softune compiler».
- Переключаемся на вкладку «Other settings»;
- Жмём кнопку «Advanced options»;
- Переключаемся на закладку «Output parsing»;
- Ищем в списке ошибок «Compiler warning», выделяем её мышой;
- В строке «Regular expression» вводим строку «\*\*\* ([^(]*)\(([0-9]+)\) (W.*)» (без кавычек);
- Ищем в списке ошибок «Compiler error», выделяем её мышой;
- В строке «Regular expression» вводим строку «\*\*\* ([^(]*)\(([0-9]+)\) (E.*)» (без кавычек);
Всё, теперь c::b знает про компилятор Softune.
Теперь открываем прилагаемый проект, и работаем.
Нажмите для просмотра прикрепленного файла
Terrabyte
Jan 23 2009, 07:22
всё сделал по пунктам, но выдаёт сообщение:
"cb - all" uses an invalid compiler. Skipping...
Nothing to be done.
3)- копирую настройки компилятора, который стоит по умочанию это должен быть GNU GCC ?
тогда во всех вкладках всё равно настройки GNU GCC (в Compiler flags.. , Toolchain executables .. )
может это связано с тем что softune установлен не в С:\Program Files\ а в корень С:\
или всё это делается лишь для того чтобы editor C::B использовать из под softune?
MrYuran
Jan 23 2009, 07:44
Цитата(Terrabyte @ Jan 23 2009, 10:22)

может это связано с тем что softune установлен не в С:\Program Files\ а в корень С:\ ?
В настройках можно (и нужно) явно указать путь к компилятору - покопайтесь по вкладкам
Нажмите для просмотра прикрепленного файлаУ меня так настроено под mspgcc
Цитата
без движения вперед - грядет топтание на месте!
Ну почему же, есть назад, право, лево и другие стороны!
Terrabyte
Jan 23 2009, 08:20
аа , это я пробовал в Toolchain прописывать пути и в Project build option .. А у вас этот проект компилит да? мне кажется что С::B должен поддерживать платформу fujitsu , потому как compiler flags для каждой платформы свои, не нашёл, где они меняются или добавляются. Копирование в разделе Global compiler полностью копирует вариант настройки конкретной платформы, это полезно, чтобы для разных проектов свои.. , но подстаканить новую платформу к этому делу.. ?? не нашел описания , и в хелпе не нахожу
MrYuran
Jan 23 2009, 08:28
Цитата(Terrabyte @ Jan 23 2009, 11:20)

подстаканить новую платформу к этому делу.. ?? не нашел описания , и в хелпе не нахожу
Лучше мэйкфайл вручную написать. И никакие платформы будут не нужны. И все ключики туда занести, заодно будете знать, что же на самом деле делает компилятор (а не догадываться)
AHTOXA
Jan 23 2009, 11:24
Цитата(Terrabyte @ Jan 23 2009, 12:22)

всё сделал по пунктам, но выдаёт сообщение:
"cb - all" uses an invalid compiler. Skipping...
Nothing to be done.

Ткните в проект, "Build options", выберите слева цель "all" и укажите для неё компилятор Softune.
Цитата
3)- копирую настройки компилятора, который стоит по умочанию это должен быть GNU GCC ?
тогда во всех вкладках всё равно настройки GNU GCC (в Compiler flags.. , Toolchain executables .. )
может это связано с тем что softune установлен не в С:\Program Files\ а в корень С:\
или всё это делается лишь для того чтобы editor C::B использовать из под softune?
Это без разницы, у нас "custom makefile" проект. Всё задано там, в makefile. Нам надо лишь научить c::b парсить выдачу компилятора.
Цитата
или всё это делается лишь для того чтобы editor C::B использовать из под softune?
Конечно. Я же сразу написал, что отлаживаться под c::b не получится.
Цитата(MrYuran @ Jan 23 2009, 12:44)

В настройках можно (и нужно) явно указать путь к компилятору
Необязательно
Terrabyte
Jan 23 2009, 15:06
спасибо за ответы, решил этот проект доделать по старому, на softune, может не придётся больше fuj касаться
Уважаемые форумчане!
Пожалуйста, дайте кто-нибудь работающий пример, как прикрутить к сабжу simulavr + gdb

,а то уже убился.
Winavr не раньше чем 20071221
Цитата(_Pasha @ Dec 18 2008, 03:15)

Вот не могу понять. Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr. Наблюдаю в окне build вместо файла. Блин, мозг сломал... не понимаю Подскажите, плз, что делать.
Кстати, забыл в свое время отписАться по этому поводу. Секрет прост, после традиционного RTFM
Код
cmd /c avr-objdump и т.д.
для выни
А вот такой вопрос. В VS можно выделить блок текста и одним нажатием отформатровать код, чтобы все многократно вложенные друг в друга if while for и т.д. выстроилсь аккуратненько друг под другом со своими скобочками и согласно уровню вложения. Очень удобно для придания нормальночитаемого вида уже написанному коду. В процессе написания приходится часто писать-вставлять куски кода из разных мест с разными отступами и не всегда удобно руками все это хозяйство "нормализировать". В CodeBlocks можно такой фокус провернуть?
И еще.....можно автоматом генерить шапки к функциям и делать свои макросы?
VS конечно удобная штука....но уж очень велика по размеру...
kurtis
Jul 21 2009, 15:07
Цитата
В CodeBlocks можно такой фокус провернуть?
Можно. Плагин AStyle называется.
MrYuran
Jul 21 2009, 15:08
Цитата(Pasa @ Jul 21 2009, 17:48)

А вот такой вопрос. В VS можно выделить блок текста и одним нажатием отформатровать код, чтобы все многократно вложенные друг в друга if while for и т.д. выстроилсь аккуратненько друг под другом со своими скобочками и согласно уровню вложения. В CodeBlocks можно такой фокус провернуть?
Можно, в виде плагина есть свободный форматтер Astyle
Есть еще много разных фишек. До VS и Eclipse конечно далеко, но для эмбеда самое то.
Можно писать свои плагины и визарды.
_Pasha
Dec 23 2009, 16:15
Созрел вопрос:
Сравниваю результаты компиляции для Winavr, управляемого средствами C:B и плагином AvrStudio. Суть - включена поддержка double и ключик -lm. Командные строки и пути библиотек ничем не отличаются.
Результат из под C:B на 2к кода и на 200 байт озу больше. Ясно, что он цепляет почему-то неоптимизированную математику. Но где пофиксить - не пойму. Подскажите, пожалуйста.

ЗЫ: все-же вручную makefile писать надежнее...
Цитата(_Pasha @ Dec 23 2009, 19:15)

Созрел вопрос...
Я конечно совсем не специалист в GCC, но думаю следующее. Первое с чего стоит начать - настроить CB для работы с пользовательским мэйкфайлом, который попросить у студиии. Сравнить результаты. Бред конечно, но фокусы разные бывают.
2. Может быть попробовать ключом -nodefaultlibs сказать кодеблоксу, чтобы он подключал только те либы, которые ему названы.
3. Не может ли быть такого, что подключаются разные стартап файлы? Хотя 2к кода и 200 байт озу вряд-ли может отъесть стартап.
MrYuran
Dec 24 2009, 05:46
Цитата(_Pasha @ Dec 23 2009, 19:15)

ЗЫ: все-же вручную makefile писать надежнее...
Я тоже так решил уже давно, тем более что у С::В есть два комплекта настроек - общие и внутрипроектные. И такая фишка, как приоритет общих или внутренних настроек. Так вот задолбался всем этим хламом рулить. Меняешь-меняешь галочки, крышу сносит, а оказывается он из другого места ключи берёт.
А против makefile не попрёшь..
Кстати, нет ли у кого профайлера под mspgcc?
Типо makefileMaker-а?
Или из чего переделать
А то буду вручную писать
Попробовал 20100227 rev6181.
Прогресс налицо. Даже Паскаль добавлен в схемы. Непонятно только, как заставить его применить folding не только к конструкциям begin/end но и repeat/until. Кстати, такой фичи вообще нигде нет. Я возмущен.
MrYuran
Apr 9 2010, 11:42
Цитата(_Pasha @ Apr 9 2010, 15:53)

Попробовал 20100227 rev6181.
Новый официальный релиз?
Или из закромов?
До недавнего времени на оф. сайте был релиз 2008г.
Недавно заметил, что фича <Alt>+"стрелочки" в С::В таки есть
Цитата(MrYuran @ Apr 9 2010, 14:57)

Новый официальный релиз?
Нет, nightly build февральского разлива. Там на форуме сцылка.
MrYuran
Jun 7 2010, 06:01
Итак, спустя два года, вышел новый релиз C::B
8.02->10.05
Список поддерживаемых компиляторов, языков и плагинов впечатляет.
По мне, так не хватает только встроенной поддержки doxygen, хотя теги в тексте подсвечиваются.
В общем, полноценная среда не только для embedded, но и для программирования PC.
Появились визарды для ARM-GCC, PowerPC и TriCore (а это что за зверь?)
Цитата(MrYuran @ Jun 7 2010, 10:01)

Итак, спустя два года, вышел новый релиз C::B
8.02->10.05
Список поддерживаемых компиляторов, языков и плагинов впечатляет.
По мне, так не хватает только встроенной поддержки doxygen, хотя теги в тексте подсвечиваются.
В общем, полноценная среда не только для embedded, но и для программирования PC.
Появились визарды для ARM-GCC, PowerPC и TriCore (а это что за зверь?)
гуд!
отлаживать по jtag через саязку OpenOCD + GDB получается? а то сей акт у меня никак до сих пор неполучался исполнть.
MrYuran
Jun 7 2010, 08:18
Цитата(klen @ Jun 7 2010, 12:08)

отлаживать по jtag через саязку OpenOCD + GDB получается? а то сей акт у меня никак до сих пор неполучался исполнть.
Меня как-то этот аспект традиционно не волнует, но на ихнем форуме видел такие темы. Наверняка уже что-то придумали.
Цитата(MrYuran @ Jun 7 2010, 12:01)

Итак, спустя два года, вышел новый релиз C::B
8.02->10.05
А я уже всё, на эклипсе. Даже пробовать не буду, заранее уверен, что c::b будет хуже
MrYuran
Jun 7 2010, 11:16
Цитата(AHTOXA @ Jun 7 2010, 14:29)

А я уже всё, на эклипсе. Даже пробовать не буду, заранее уверен, что c::b будет хуже

А я никак соскочить не могу...
Да и не хочу..

А тут ещё мегафича появилась (или я раньше не замечал?) - блочное редактирование.
То есть выделяем столбец с <ALT>-ом, и можем делать с ним всё что угодно. Я ещё полностью не освоился, но уже нравится!
demiurg_spb
Jun 7 2010, 21:01
Цитата(MrYuran @ Jun 7 2010, 15:16)

А тут ещё мегафича появилась (или я раньше не замечал?) - блочное редактирование.
Эта фича я думаю не новая, она даже в FARе лет 100 уже как имеется. А слона то и не заметил:-)
_Pasha
Jun 30 2010, 20:37
Цитата(MrYuran @ Jun 7 2010, 09:01)

Итак, спустя два года, вышел новый релиз C::B
8.02->10.05

Кто знает, отчего 10.05 (под виндозой) иногда намертво виснет при попытке сохранения файлов, понимая только ALT-F4? Раньше такого не было даже с последними nightly builds.
MrYuran
Sep 10 2010, 09:29
Цитата(_Pasha @ Jul 1 2010, 00:37)


Кто знает, отчего 10.05 (под виндозой) иногда намертво виснет при попытке сохранения файлов, понимая только ALT-F4? Раньше такого не было даже с последними nightly builds.
Ни разу не наблюдал такого
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.