Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Code::Blocks -> How To
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Страницы: 1, 2, 3, 4, 5
MrYuran
Внизу есть вкладка Build Log, в неё можно вывести подробный лог со всеми командами, ключами и т.д. и даже сохранить его в файл. В настройках где-то есть соответственная галка.
Вот пример:
Нажмите для просмотра прикрепленного файла

А вот нужные галки:
Нажмите для просмотра прикрепленного файла
Григорий2000
Да, спасибо, уже нашел где это включить...
и, как оказалось, линкеру передаются все файлы. Однако, немогу понять во первых почему линкуется другим файлом, обычно компилер и линкер - один и тот-же файл
Цитата
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
Небольшой вопрос.
Возможно ли чтоб по нажатию кнопки Run осуществлялось программирование контроллера?
Сейчас я прошиваю контроллер через макрос в makefile ( т.е. в консоли пишу make prog, где prog это имя макроса ). Частично решил проблему с помощью Tools -> Configure tools... , но там нельзя назначить сочетания клавиш для автоматического запуска, да и кнопка Run оказалась незадействованной.
alx2
Привет, Григорий2000!
Цитата(Григорий2000 @ Nov 26 2008, 13:55) *
Код
C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset'
Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm?
Григорий2000
Цитата(alx2 @ Nov 26 2008, 21:27) *
Привет, Григорий2000!
Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm?

уверен на 220%
я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество)
msalov
Цитата(Григорий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
А линкер-то 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
C выводом обьявлений функций как

#ifdef __cplusplus
extern "C" {
#endif

все успешно линкуется.
незапоминаю решения в котрых непонятен принцип действия.
С этим ответом встало все на свои места...

используется линкер g++(поумолчанию)
_Pasha
Вот не могу понять. Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr. Наблюдаю в окне build вместо файла. Блин, мозг сломал... не понимаю Подскажите, плз, что делать.
AHTOXA
objdump 2>&1 тоже не помогает? smile.gif
_Pasha
Не помогает sad.gif
alx2
Цитата(_Pasha @ Dec 18 2008, 05:15) *
Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr.
У меня objdump выводит в stdout (binutils-2.18). Видимо, перенаправление вывода у тебя делает сабж.
_Pasha
Очевидно, да, потому что objcopy ведь справляется со своей работой.
Более подробно: проект под AVR, запускаю objdump в post-build.
AHTOXA
Чудесаsmile.gif
Сейчас под рукой нет c::b, потому могу дать только идеологический совет - пользовать custom makefile. В этом случае всё в руках разработчика, и значительно проще переключаться между различными семействами МК.
AHTOXA
Придумалsmile.gif
Надо написать bat-файл с вызовом avr-objdump, и его прописать в post-build. Вроде работает.
_Pasha
Цитата(AHTOXA @ Dec 19 2008, 00:12) *
могу дать только идеологический совет - пользовать custom makefile.

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

Как это?
Project -> Properties -> Кнопочька "Project's Build Options"
Выбираете любые ключи, флаги, кристаллы и т.д.
Правда, я под МСП, без визарда, но через имеющийся интерфейс к MSPGCC
Нажмите для просмотра прикрепленного файла
alx2
Цитата(AHTOXA @ Dec 19 2008, 10:52) *
Надо написать bat-файл с вызовом avr-objdump, и его прописать в post-build. Вроде работает.
Вроде непонятно, почему работает. Если просто вызов одной команды заменен на вызов другой, то почему вывод первой сабж перенаправлял в stderr, а вывод второй перенаправлять не стал?
_Pasha
Цитата(MrYuran @ Dec 19 2008, 17:10) *
Как это?

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

Это я немного приврал smile.gif - с непривычки запутался в release/debug.
AHTOXA
Цитата(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


Но теперь это совсем не мешает перенаправлению в файл внутри батникаsmile.gif

ЗЫ. Имена файлов можно передавать как параметры, для гибкости.
Terrabyte
Здравствуйте, с 2009 годом всех !
Сейчас в основном работаю с fujitsu и с ARM. Хотел подобрать для себя графический редактор, потому как сложно переключится с IARa(ARM) на softune, в связи с этим вопрос, кто-нибудь применял Code::Blocks и softune? будет ли дисасемблер работать?
AHTOXA
Дизассемблер - вряд ли. А в качестве удобного редактора - c::b вполне можно применить с компилятором softune.
Пример проекта и makefile прилагаю.
Нажмите для просмотра прикрепленного файла
Terrabyte
спасибо, пока что небыло времени попробовать C::B, пытался настроить RistanCASE DAC v4.2.83 - в демо версии, понравилась, но больше 4кВ прогу - посылает ..., а по прайсу , если не ошибаюсь, лицензия на этот DAC 700евр. А может кряк у кого есть на DAC последний ? но похоже что симулятор к даку не получится подрубить, а в C::B симулятор softunовский ..настраивается? а про дизассемблер похоже совсем придётся забыть
Terrabyte
в C::B удобный editor, это да, но как заставить его компелить через softune? что означает графа Resourse compiler ? как быть с ассемблером fasm907s.exe ? некоторые asm-команды только он может обработать , как быть с fscv907s.exe ? и потом, есть: linker (flnk907s) and the old linker (link907a).. мне кажеьтся что это всё не реально настроить. Может кто знает как шрифт поменять в softune, а то только один fixedsys руский шрифт понимает?
AHTOXA
Как настроить Code::Blocks для работы с softune
  1. Запускаем c::b;
  2. Идём в меню Settings – Compiler and debugger.
  3. Жмём кнопку «Copy».
  4. Вводим имя нового компилятора: «Softune compiler».
  5. Переключаемся на вкладку «Other settings»;
  6. Жмём кнопку «Advanced options»;
  7. Переключаемся на закладку «Output parsing»;
  8. Ищем в списке ошибок «Compiler warning», выделяем её мышой;
  9. В строке «Regular expression» вводим строку «\*\*\* ([^(]*)\(([0-9]+)\) (W.*)» (без кавычек);
  10. Ищем в списке ошибок «Compiler error», выделяем её мышой;
  11. В строке «Regular expression» вводим строку «\*\*\* ([^(]*)\(([0-9]+)\) (E.*)» (без кавычек);
Всё, теперь c::b знает про компилятор Softune.

Теперь открываем прилагаемый проект, и работаем.

Нажмите для просмотра прикрепленного файла
Terrabyte
всё сделал по пунктам, но выдаёт сообщение:
"cb - all" uses an invalid compiler. Skipping...
Nothing to be done. smile3046.gif

3)- копирую настройки компилятора, который стоит по умочанию это должен быть GNU GCC ?
тогда во всех вкладках всё равно настройки GNU GCC (в Compiler flags.. , Toolchain executables .. )
может это связано с тем что softune установлен не в С:\Program Files\ а в корень С:\
или всё это делается лишь для того чтобы editor C::B использовать из под softune?
MrYuran
Цитата(Terrabyte @ Jan 23 2009, 10:22) *
может это связано с тем что softune установлен не в С:\Program Files\ а в корень С:\ ?

В настройках можно (и нужно) явно указать путь к компилятору - покопайтесь по вкладкам
Нажмите для просмотра прикрепленного файла
У меня так настроено под mspgcc

Цитата
без движения вперед - грядет топтание на месте!

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

Лучше мэйкфайл вручную написать. И никакие платформы будут не нужны. И все ключики туда занести, заодно будете знать, что же на самом деле делает компилятор (а не догадываться)
AHTOXA
Цитата(Terrabyte @ Jan 23 2009, 12:22) *
всё сделал по пунктам, но выдаёт сообщение:
"cb - all" uses an invalid compiler. Skipping...
Nothing to be done. smile3046.gif


Ткните в проект, "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) *
В настройках можно (и нужно) явно указать путь к компилятору


Необязательноsmile.gif
Terrabyte
спасибо за ответы, решил этот проект доделать по старому, на softune, может не придётся больше fuj касаться
_Pasha
Уважаемые форумчане!

Пожалуйста, дайте кто-нибудь работающий пример, как прикрутить к сабжу simulavr + gdb  smile3046.gif ,а то уже убился.

Winavr не раньше чем 20071221
_Pasha
Цитата(_Pasha @ Dec 18 2008, 03:15) *
Вот не могу понять. Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr. Наблюдаю в окне build вместо файла. Блин, мозг сломал... не понимаю Подскажите, плз, что делать.


Кстати, забыл в свое время отписАться по этому поводу. Секрет прост, после традиционного RTFM
Код
cmd /c avr-objdump и т.д.
для выни
Pasa
А вот такой вопрос. В VS можно выделить блок текста и одним нажатием отформатровать код, чтобы все многократно вложенные друг в друга if while for и т.д. выстроилсь аккуратненько друг под другом со своими скобочками и согласно уровню вложения. Очень удобно для придания нормальночитаемого вида уже написанному коду. В процессе написания приходится часто писать-вставлять куски кода из разных мест с разными отступами и не всегда удобно руками все это хозяйство "нормализировать". В CodeBlocks можно такой фокус провернуть?

И еще.....можно автоматом генерить шапки к функциям и делать свои макросы?

VS конечно удобная штука....но уж очень велика по размеру...
kurtis
Цитата
В CodeBlocks можно такой фокус провернуть?

Можно. Плагин AStyle называется.
MrYuran
Цитата(Pasa @ Jul 21 2009, 17:48) *
А вот такой вопрос. В VS можно выделить блок текста и одним нажатием отформатровать код, чтобы все многократно вложенные друг в друга if while for и т.д. выстроилсь аккуратненько друг под другом со своими скобочками и согласно уровню вложения. В CodeBlocks можно такой фокус провернуть?

Можно, в виде плагина есть свободный форматтер Astyle
Есть еще много разных фишек. До VS и Eclipse конечно далеко, но для эмбеда самое то.
Можно писать свои плагины и визарды.
_Pasha
Созрел вопрос:
Сравниваю результаты компиляции для Winavr, управляемого средствами C:B и плагином AvrStudio. Суть - включена поддержка double и ключик -lm. Командные строки и пути библиотек ничем не отличаются.
Результат из под C:B на 2к кода и на 200 байт озу больше. Ясно, что он цепляет почему-то неоптимизированную математику. Но где пофиксить - не пойму. Подскажите, пожалуйста. smile3046.gif
ЗЫ: все-же вручную makefile писать надежнее...
smac
Цитата(_Pasha @ Dec 23 2009, 19:15) *
Созрел вопрос...

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

Я тоже так решил уже давно, тем более что у С::В есть два комплекта настроек - общие и внутрипроектные. И такая фишка, как приоритет общих или внутренних настроек. Так вот задолбался всем этим хламом рулить. Меняешь-меняешь галочки, крышу сносит, а оказывается он из другого места ключи берёт.
А против makefile не попрёшь..

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

Новый официальный релиз?
Или из закромов?
До недавнего времени на оф. сайте был релиз 2008г.

Недавно заметил, что фича <Alt>+"стрелочки" в С::В таки есть
_Pasha
Цитата(MrYuran @ Apr 9 2010, 14:57) *
Новый официальный релиз?

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

гуд!
отлаживать по jtag через саязку OpenOCD + GDB получается? а то сей акт у меня никак до сих пор неполучался исполнть.
MrYuran
Цитата(klen @ Jun 7 2010, 12:08) *
отлаживать по jtag через саязку OpenOCD + GDB получается? а то сей акт у меня никак до сих пор неполучался исполнть.

Меня как-то этот аспект традиционно не волнует, но на ихнем форуме видел такие темы. Наверняка уже что-то придумали.
AHTOXA
Цитата(MrYuran @ Jun 7 2010, 12:01) *
Итак, спустя два года, вышел новый релиз C::B
8.02->10.05

А я уже всё, на эклипсе. Даже пробовать не буду, заранее уверен, что c::b будет хужеsmile.gif
MrYuran
Цитата(AHTOXA @ Jun 7 2010, 14:29) *
А я уже всё, на эклипсе. Даже пробовать не буду, заранее уверен, что c::b будет хужеsmile.gif

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

Эта фича я думаю не новая, она даже в FARе лет 100 уже как имеется. А слона то и не заметил:-)
_Pasha
Цитата(MrYuran @ Jun 7 2010, 09:01) *
Итак, спустя два года, вышел новый релиз C::B
8.02->10.05

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

Ни разу не наблюдал такого
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.