реклама на сайте
подробности

 
 
10 страниц V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> scmRtos для медных чайников
_Артём_
сообщение Oct 19 2012, 23:00
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Chudik @ Oct 19 2012, 23:22) *
Угу, именно так.

Это шаблон такой.

Когда в h-файлах содержится значительная часть проекта(шаблоны), то хотелось бы иметь возможность добраться до их содержимого простым кликом мыши.

Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 26 2012, 22:32
Сообщение #77


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676



Ничего не понимаю
Код
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 */

Но при этом опять возвращается к первой ошибке из указанной здесь.

Посоветуйте, что делать? sad.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 26 2012, 23:21
Сообщение #78


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Это же GCC-шные названия файлов и регистров у меня! Просто подключите IAR-овские, и поправьте несовпадающие названия регистров (типа U0CTL).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 26 2012, 23:57
Сообщение #79


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676



Логично, конечно.
Сейчас посмотрю. Мне казалось, что они одинаковые... rolleyes.gif

======================
Посмотрел. Регистры совсем другие. Ладно, попробую разобраться.
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 27 2012, 03:18
Сообщение #80


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676



Регистры переназначил. Функцию 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(); }
не помогает

Уфф... тяжко. Надеюсь, что когда проделаю первые шаги дальше будет легче sm.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 27 2012, 05:43
Сообщение #81


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



sm.gif
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.)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 27 2012, 05:53
Сообщение #82


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676



Ага, спасибо, поменял. Полегчало. sm.gif
Соотвественно, убрал свои изменения для второй части вопроса.

Теперь уже после того, как эта часть откомпилировалась, буду свой класс дисплея допиливать. sm.gif
Go to the top of the page
 
+Quote Post
dezna
сообщение Jan 21 2013, 10:38
Сообщение #83


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



добрый день!
появилась необходимость использовать scmRTOS в своём проекте.
пробовал 1-EVENT на кристаллах: STM32F100CB и STM32F103VG.
не заработало ни на одном.
изменял только main.cpp на предмет светодиодов.
приборы взял заведомо рабочие.
ни один процесс не запускается, хотя в main() программа заходит. т.е. принудительно светодиоды при инициализации МК
включаются (на обеих железках).
использую GCC 4.6.2. может в компиляторе какой косяк?
собирается всё без ошибок. в makefile правил только компилятор, ну и загрузчик.
подскажите пожалуйста куда посмотреть? только начинаю разбираться с ОС.

Сообщение отредактировал dezna - Jan 21 2013, 10:42
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 21 2013, 11:10
Сообщение #84


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело?
Для проверки попробуйте поменять TProc1::exec() вот на такую:
Код
    OS_PROCESS void TProc1::exec()
    {
        for(;;)
        {
            sleep(500);
            PB0.On();
            sleep(500);
            PB0.Off();
        }
    }


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dezna
сообщение Jan 21 2013, 11:17
Сообщение #85


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(AHTOXA @ Jan 21 2013, 15:10) *
Светодиоды в 1-EventFlag мигают быстро-быстро, глазом не углядеть. Может быть, в этом дело?


я об этом думал. подключал осцилограф.
на всякий случай попробовал - нет, не работает!
LSS файл для сравниения. замена Pin<'B', 0> - <'B', 11>, Pin<'B', 1> - <'B', 12>
Прикрепленный файл  1_EventFlag.lss.txt ( 11.94 килобайт ) Кол-во скачиваний: 281


Сообщение отредактировал dezna - Jan 21 2013, 11:30
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 21 2013, 16:22
Сообщение #86


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались.
Что за компилятор у вас?
Попробуйте yagarto или kgp. С ними я проверял - работает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dezna
сообщение Jan 22 2013, 04:58
Сообщение #87


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(AHTOXA @ Jan 21 2013, 20:22) *
В вашем листинге нет упоминания о конструкторах. Похоже, что они не слинковались.
Что за компилятор у вас?

я просил товарища собрать мне рабочий пример. он у себя проверил - работает. на моей железке тоже.
так вот: компилятор уоптимизировал программу до "нельзя" (судя по размеру в 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)

Цитата(AHTOXA @ Jan 21 2013, 20:22) *
Попробуйте yagarto или kgp. С ними я проверял - работает.

yagarto - под линук не нашёл
kgp - попробую
но конечно хотелось бы разобраться с моей сборкой. могу куда-нибудь скинуть для проверки.
потому как все остальные проекты то работают.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 22 2013, 05:47
Сообщение #88


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(dezna @ Jan 22 2013, 10:58) *
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))


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dezna
сообщение Jan 22 2013, 06:21
Сообщение #89


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(AHTOXA @ Jan 22 2013, 09:47) *
Код
        KEEP(SORT(*)(.ctors))

уже лучше, но всё равно чего-то ещё не хватает
сравниваю один проект от 2-х компиляторов:
<OS::TBaseProcess::init_stack_frame - раза в 2 меньше
<Default_SystemTimer_ISR> - тоже
<__Init_Data> - тоже.
к сожалению в арм асме я "0", потому проанализировать не могу
вот новый lss
Прикрепленный файл  1_EventFlag.lss.txt ( 25.05 килобайт ) Кол-во скачиваний: 266

помогите пожалуйста добить этот вопрос!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 22 2013, 08:20
Сообщение #90


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Сложно сказать. Листинг практически идентичен моему. init_stack_frame и Default_SystemTimer_ISR - вообще один-в-один.
Должно работать!

ЗЫ. Если уж совсем не пойдёт, и вы боитесь самодельных сборок, то есть Sourcery CodeBench Lite, бывшая sourcery g++ lite. (качать ARM EABI Release).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

10 страниц V  « < 4 5 6 7 8 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 11:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016