Артём__ 0 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба Угу, именно так. Это шаблон такой. Когда в h-файлах содержится значительная часть проекта(шаблоны), то хотелось бы иметь возможность добраться до их содержимого простым кликом мыши. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 26 октября, 2012 Опубликовано 26 октября, 2012 · Жалоба Ничего не понимаю 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 */ Но при этом опять возвращается к первой ошибке из указанной здесь. Посоветуйте, что делать? :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 26 октября, 2012 Опубликовано 26 октября, 2012 · Жалоба Это же GCC-шные названия файлов и регистров у меня! Просто подключите IAR-овские, и поправьте несовпадающие названия регистров (типа U0CTL). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 26 октября, 2012 Опубликовано 26 октября, 2012 · Жалоба Логично, конечно. Сейчас посмотрю. Мне казалось, что они одинаковые... :rolleyes: ====================== Посмотрел. Регистры совсем другие. Ладно, попробую разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 27 октября, 2012 Опубликовано 27 октября, 2012 · Жалоба Регистры переназначил. Функцию 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(); } не помогает Уфф... тяжко. Надеюсь, что когда проделаю первые шаги дальше будет легче :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 27 октября, 2012 Опубликовано 27 октября, 2012 · Жалоба :) 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.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chudik 0 27 октября, 2012 Опубликовано 27 октября, 2012 · Жалоба Ага, спасибо, поменял. Полегчало. :) Соотвественно, убрал свои изменения для второй части вопроса. Теперь уже после того, как эта часть откомпилировалась, буду свой класс дисплея допиливать. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 21 января, 2013 Опубликовано 21 января, 2013 (изменено) · Жалоба добрый день! появилась необходимость использовать scmRTOS в своём проекте. пробовал 1-EVENT на кристаллах: STM32F100CB и STM32F103VG. не заработало ни на одном. изменял только main.cpp на предмет светодиодов. приборы взял заведомо рабочие. ни один процесс не запускается, хотя в main() программа заходит. т.е. принудительно светодиоды при инициализации МК включаются (на обеих железках). использую GCC 4.6.2. может в компиляторе какой косяк? собирается всё без ошибок. в makefile правил только компилятор, ну и загрузчик. подскажите пожалуйста куда посмотреть? только начинаю разбираться с ОС. Изменено 21 января, 2013 пользователем dezna Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 21 января, 2013 Опубликовано 21 января, 2013 · Жалоба Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело? Для проверки попробуйте поменять TProc1::exec() вот на такую: OS_PROCESS void TProc1::exec() { for(;;) { sleep(500); PB0.On(); sleep(500); PB0.Off(); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 21 января, 2013 Опубликовано 21 января, 2013 (изменено) · Жалоба Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело? я об этом думал. подключал осцилограф. на всякий случай попробовал - нет, не работает! LSS файл для сравниения. замена Pin<'B', 0> - <'B', 11>, Pin<'B', 1> - <'B', 12> 1_EventFlag.lss.txt Изменено 21 января, 2013 пользователем dezna Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 21 января, 2013 Опубликовано 21 января, 2013 · Жалоба В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались. Что за компилятор у вас? Попробуйте yagarto или kgp. С ними я проверял - работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 22 января, 2013 Опубликовано 22 января, 2013 · Жалоба В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались. Что за компилятор у вас? я просил товарища собрать мне рабочий пример. он у себя проверил - работает. на моей железке тоже. так вот: компилятор уоптимизировал программу до "нельзя" (судя по размеру в 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 - попробую но конечно хотелось бы разобраться с моей сборкой. могу куда-нибудь скинуть для проверки. потому как все остальные проекты то работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 января, 2013 Опубликовано 22 января, 2013 · Жалоба 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)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 22 января, 2013 Опубликовано 22 января, 2013 · Жалоба KEEP(SORT(*)(.ctors)) уже лучше, но всё равно чего-то ещё не хватает сравниваю один проект от 2-х компиляторов: <OS::TBaseProcess::init_stack_frame - раза в 2 меньше <Default_SystemTimer_ISR> - тоже <__Init_Data> - тоже. к сожалению в арм асме я "0", потому проанализировать не могу вот новый lss 1_EventFlag.lss.txt помогите пожалуйста добить этот вопрос! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 22 января, 2013 Опубликовано 22 января, 2013 · Жалоба Сложно сказать. Листинг практически идентичен моему. init_stack_frame и Default_SystemTimer_ISR - вообще один-в-один. Должно работать! ЗЫ. Если уж совсем не пойдёт, и вы боитесь самодельных сборок, то есть Sourcery CodeBench Lite, бывшая sourcery g++ lite. (качать ARM EABI Release). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться