Артём__ 1 October 19, 2012 Posted October 19, 2012 · Report post Угу, именно так. Это шаблон такой. Когда в h-файлах содержится значительная часть проекта(шаблоны), то хотелось бы иметь возможность добраться до их содержимого простым кликом мыши. Quote Share this post Link to post Share on other sites More sharing options...
Chudik 0 October 26, 2012 Posted October 26, 2012 · Report post Ничего не понимаю Error[Pe020]: identifier "U0CTL" is undefined G:\My_Designs\RKI\M3\Firmware\M3_Terminal\Peripheral\spi.h 104 Где этот U0CTL определён? Когда начинаю искать, то указывает только на spi.h Если подключаю "msp430.h", то эта ошибка исчезает, но при этом возникает другая: Error[Pe101]: "IE1" has already been declared in the current scope (at line 108 of "E:\Design\TI\IAR Systems\Embedded Workbench 6.4\430\inc\io430x24x.h") E:\Design\TI\IAR Systems\Embedded Workbench 6.4\430\inc\msp430f2410.h 133 detected during compilation of secondary translation unit "G:\My_Designs\RKI\M3\Firmware\M3_Terminal\M3_Terminal.cpp" посмотрел директории с файлами msp430...h Нашёл, что там кроме этого есть io430x....h , причём msp430... для С, а io430... = для С++. Хорошо, подумал я. Хоть не любитель менять системные файлы, но сделал следующее в msp430.h #ifdef __cplusplus #include <io430.h> #else // здесь выбор кокретного файла, отвечающего за нужный чип #endif /* ifdef __cplusplus */ Но при этом опять возвращается к первой ошибке из указанной здесь. Посоветуйте, что делать? :( Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 October 26, 2012 Posted October 26, 2012 · Report post Это же GCC-шные названия файлов и регистров у меня! Просто подключите IAR-овские, и поправьте несовпадающие названия регистров (типа U0CTL). Quote Share this post Link to post Share on other sites More sharing options...
Chudik 0 October 26, 2012 Posted October 26, 2012 · Report post Логично, конечно. Сейчас посмотрю. Мне казалось, что они одинаковые... :rolleyes: ====================== Посмотрел. Регистры совсем другие. Ладно, попробую разобраться. Quote Share this post Link to post Share on other sites More sharing options...
Chudik 0 October 27, 2012 Posted October 27, 2012 · Report post Регистры переназначил. Функцию rw для SPI подправил в соответствии с переписанными регистрами. Эта часть откомпилировалась. Теперь вопросы: в spi.h определено: template <spi_num_t> // строка добавлена, поскольку без неё потом появлялась ошибка при использовании класса spi_base_t class spi_base_t { private: OS::TMutex mutex; public: .... В соответствии с указаниями маэстро в http://electronix.ru/forum/index.php?showt...t&p=1099201 пишу typedef spi_base_t<SPI1> TSpi1; extern TSpi1 spi1; // << line 19 in errors list Соответственно получаю ошибку: Error[Pe322]: object of abstract class type "spi_base_t<(spi_num_t)1U>" is not allowed: function "spi_base_t<<unnamed>>::rw [with <unnamed>=(spi_num_t)1U]" is a pure virtual function G:\My_Designs\RKI\M3\Firmware\M3_Terminal\M3_terminal.h 19 Также на описание класса spi_t в spi.h template <spi_num_t spi_num> class spi_t : public spi_base_t <spi_num> // added <spi_num> { private: typedef spi_regs_t<spi_num> regs; typedef spi_pins_t<spi_num> pins_t; typedef typename pins_t::PinSCK SCK; typedef typename pins_t::PinMISO MISO; typedef typename pins_t::PinMOSI MOSI; public: spi_t(): spi_base_t() { init(); } // << line 151 in errors list получаю следующие ошибки: Error[Pe441]: argument list for class template "spi_base_t" is missing G:\My_Designs\RKI\M3\Firmware\M3_Terminal\Peripheral\spi.h 151 пытался ставить spi_t(): spi_base_t(spi_num) { init(); } spi_t(): spi_base_t<spi_num> { init(); } не помогает Уфф... тяжко. Надеюсь, что когда проделаю первые шаги дальше будет легче :) Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 October 27, 2012 Posted October 27, 2012 · Report post :) 1. spi_base_t - это не шаблонный класс, не надо к нему добавлять "template <spi_num_t>". 2. spi_base_t - это абстрактный класс, нельзя создавать его экземпляры. Замените typedef spi_base_t<SPI1> TSpi1; на typedef spi_t<SPI1> TSpi1; (Идея spi_base_t в том, чтобы иметь базовый класс для всех реализаций SPI. Мы можем передавать ссылку на него в конструкторы других объектов, которые висят на SPI.) Quote Share this post Link to post Share on other sites More sharing options...
Chudik 0 October 27, 2012 Posted October 27, 2012 · Report post Ага, спасибо, поменял. Полегчало. :) Соотвественно, убрал свои изменения для второй части вопроса. Теперь уже после того, как эта часть откомпилировалась, буду свой класс дисплея допиливать. :) Quote Share this post Link to post Share on other sites More sharing options...
dezna 0 January 21, 2013 Posted January 21, 2013 (edited) · Report post добрый день! появилась необходимость использовать scmRTOS в своём проекте. пробовал 1-EVENT на кристаллах: STM32F100CB и STM32F103VG. не заработало ни на одном. изменял только main.cpp на предмет светодиодов. приборы взял заведомо рабочие. ни один процесс не запускается, хотя в main() программа заходит. т.е. принудительно светодиоды при инициализации МК включаются (на обеих железках). использую GCC 4.6.2. может в компиляторе какой косяк? собирается всё без ошибок. в makefile правил только компилятор, ну и загрузчик. подскажите пожалуйста куда посмотреть? только начинаю разбираться с ОС. Edited January 21, 2013 by dezna Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 January 21, 2013 Posted January 21, 2013 · Report post Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело? Для проверки попробуйте поменять TProc1::exec() вот на такую: OS_PROCESS void TProc1::exec() { for(;;) { sleep(500); PB0.On(); sleep(500); PB0.Off(); } } Quote Share this post Link to post Share on other sites More sharing options...
dezna 0 January 21, 2013 Posted January 21, 2013 (edited) · Report post Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело? я об этом думал. подключал осцилограф. на всякий случай попробовал - нет, не работает! LSS файл для сравниения. замена Pin<'B', 0> - <'B', 11>, Pin<'B', 1> - <'B', 12> 1_EventFlag.lss.txt Edited January 21, 2013 by dezna Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 January 21, 2013 Posted January 21, 2013 · Report post В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались. Что за компилятор у вас? Попробуйте yagarto или kgp. С ними я проверял - работает. Quote Share this post Link to post Share on other sites More sharing options...
dezna 0 January 22, 2013 Posted January 22, 2013 · Report post В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались. Что за компилятор у вас? я просил товарища собрать мне рабочий пример. он у себя проверил - работает. на моей железке тоже. так вот: компилятор уоптимизировал программу до "нельзя" (судя по размеру в 3 раза). там нет упоминания о процессах вообще. судя по всему он посчитал включение выключение выходов не существенным! как это обойти? компилятор gcc-4.6.2 вот флаги сборки: Using built-in specs. COLLECT_GCC=/opt/arm-elf/bin/arm-elf-gcc-4.6.2 COLLECT_LTO_WRAPPER=/opt/arm-elf/libexec/gcc/arm-elf/4.6.2/lto-wrapper Target: arm-elf Configured with: ../gcc-4.6.2/configure --prefix=/opt/arm-elf --target=arm-elf --with-gnu-ld --with-gnu-as --disable-nls --disable-libssp --enable-interwork --enable-multilib --with-newlib --with-headers=../newlib-1.20.0/newlib/libc/include/ --enable-languages=c,c++ --with-float=soft --without-ppl Thread model: single gcc version 4.6.2 (GCC) Попробуйте yagarto или kgp. С ними я проверял - работает. yagarto - под линук не нашёл kgp - попробую но конечно хотелось бы разобраться с моей сборкой. могу куда-нибудь скинуть для проверки. потому как все остальные проекты то работают. Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 January 22, 2013 Posted January 22, 2013 · Report post COLLECT_GCC=/opt/arm-elf/bin/arm-elf-gcc-4.6.2 А, у вас не-eabi сборка. Она складывает конструкторы в другое место. Попробуйте в скрипт линкера после строки KEEP(SORT(*)(.init_array)) /* eabi uses .init_array for static constructor lists */ вставить KEEP(SORT(*)(.ctors)) Quote Share this post Link to post Share on other sites More sharing options...
dezna 0 January 22, 2013 Posted January 22, 2013 · Report post KEEP(SORT(*)(.ctors)) уже лучше, но всё равно чего-то ещё не хватает сравниваю один проект от 2-х компиляторов: <OS::TBaseProcess::init_stack_frame - раза в 2 меньше <Default_SystemTimer_ISR> - тоже <__Init_Data> - тоже. к сожалению в арм асме я "0", потому проанализировать не могу вот новый lss 1_EventFlag.lss.txt помогите пожалуйста добить этот вопрос! Quote Share this post Link to post Share on other sites More sharing options...
AHTOXA 25 January 22, 2013 Posted January 22, 2013 · Report post Сложно сказать. Листинг практически идентичен моему. init_stack_frame и Default_SystemTimer_ISR - вообще один-в-один. Должно работать! ЗЫ. Если уж совсем не пойдёт, и вы боитесь самодельных сборок, то есть Sourcery CodeBench Lite, бывшая sourcery g++ lite. (качать ARM EABI Release). Quote Share this post Link to post Share on other sites More sharing options...