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

 
 
10 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> scmRtos для медных чайников
Chudik
сообщение Oct 4 2012, 21:11
Сообщение #46


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

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



Цитата(_Артём_ @ Oct 4 2012, 13:10) *
Ну да. Через mutex обычно и делается.

Спасибо.
Насколько я понимаю, у тебя есть опыт работы с этой системой. Пока уважаемые авторы системы заняты, может подскажешь по поводу моей структуры. Нормально или что-то изменил бы?
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 4 2012, 23:54
Сообщение #47


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

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



Не нашёл в документации других членов класса process кроме так exec. Это так и должно быть?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 5 2012, 00:35
Сообщение #48


Гуру
******

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



Цитата(Chudik @ Oct 5 2012, 02:54) *
Не нашёл в документации других членов класса process кроме так exec. Это так и должно быть?

Да, где-то так:
Код
        template<TPriority pr, size_t stack_size>
        class process : public TBaseProcess
        {
        public:
            INLINE_PROCESS_CTOR process();

            OS_PROCESS static void exec();
            
        #if scmRTOS_PROCESS_RESTART_ENABLE == 1
            INLINE void terminate();
        #endif


Но так как process насладник TBaseProcess,
то есть ещё методы, перешедшие по наследству от TBaseProcess:
Код
        static void sleep(timeout_t timeout = 0);
               void wake_up();
               void force_wake_up();
        INLINE void start() { force_wake_up(); }

        INLINE bool is_sleeping() const;
        INLINE bool is_suspended() const;
        /// и так далее.....
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 5 2012, 02:17
Сообщение #49


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

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



Ага, спасибо, нашёл в доке.
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 5 2012, 14:22
Сообщение #50


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

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



Возможно глупый вопрос: может ли mutex быть членом класса или он всегда является внешним по отношению к любым другим объектам?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 5 2012, 14:27
Сообщение #51


Гуру
******

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



Цитата(Chudik @ Oct 5 2012, 17:22) *
может ли mutex быть членом класса или он всегда является внешним по отношению к любым другим объектам?

Конечно может быть и членом класса (экземпляр при этом - глобальная переменная) и глобальной переменной.
Насчёт локальной не знаю, не думал.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 5 2012, 16:41
Сообщение #52


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

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



Локальной тоже может.
Например, представьте, что у вас есть несколько пулов такого вида:
Код
class Pool {
public:
    void lock()             { mutex_.lock(); }
    void unlock()           { mutex_.unlock(); }
    bool try_to_lock()      { return mutex_.lock_softly(); }
    ...
private:
    OS::TMutex mutex_;
    ...
}

У меня такие мутексы встроены в классы SPI, UART... Очень удобно, спокойно пишу из любого потока.
---
Ой, что-то я поспешил. Это же не локальные объекты, это как раз члены классаsm.gif
Зачем могут понадобиться локальные мутексы - с ходу не придумалось.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 5 2012, 17:03
Сообщение #53


Гуру
******

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



Цитата(AHTOXA @ Oct 5 2012, 19:41) *
Локальной тоже может.

Класс тоже может быть локальной переменной.

Цитата(AHTOXA @ Oct 5 2012, 19:41) *
Зачем могут понадобиться локальные мутексы - с ходу не придумалось.

Говорят глобальные переменные - это плохо, чем их меньше, тем лучше.
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 5 2012, 23:59
Сообщение #54


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

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



Цитата(AHTOXA @ Oct 5 2012, 09:41) *
У меня такие мутексы встроены в классы SPI, UART... Очень удобно, спокойно пишу из любого потока.

Вот, вот. На удивление нужно именно это wink.gif
Можно попросить выложить эти классы и, если нетрудно, фрагменты кода с ними?
Дело в том, что в последний раз с С++ я работал лет 15 назад и потому сейчас приходится всё вспоминать по-новой.
При этом тогда это были модели обработки сигналов на РС, которые потом перекидывались в DSP, но обработка уже писалась на соответствующем ассемблере. Т.е. мутексы просто не требовались. Так что не только вспоминать приходится, но и кое-что узнавать.
Ещё хорошо, что с месяц назад поработал на подхвате на проекте с freeRTOS. Вспомнились приёмы работы с RTOS в принципе sm.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 6 2012, 01:03
Сообщение #55


Гуру
******

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



Цитата(Chudik @ Oct 6 2012, 02:59) *
Вот, вот. На удивление нужно именно это wink.gif
Можно попросить выложить эти классы и, если нетрудно, фрагменты кода с ними?

А чем не устраивают примеры из документации(я про 5.4. OS::TMutex )?



Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 6 2012, 03:07
Сообщение #56


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

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



Цитата(_Артём_ @ Oct 5 2012, 18:03) *
А чем не устраивают примеры из документации(я про 5.4. OS::TMutex )?

Устраивают, но при отстутствии опыта работы с этой системой написать свои драйвера под неё в грамотном стиле займёт не меньше недели. Если не больше. А если автор системы сможет дать авторский вариант таких драйверов, это сильно упростит дело.
В обмен потом смогу выложить драйвер графического дисплея в текстовом режиме, работающего по этому SPI. И попозже драйвер I2C, созданный по образу и подобию. RS485 на базе того же UART.
Нужна точка опоры sm.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 6 2012, 08:53
Сообщение #57


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

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



Цитата(Chudik @ Oct 6 2012, 05:59) *
Можно попросить выложить эти классы и, если нетрудно, фрагменты кода с ними?

Вот SPI.h+Pin.h: Прикрепленный файл  spi_msp430.zip ( 3.15 килобайт ) Кол-во скачиваний: 94

Используется это примерно так:
Создаём шаблон для устройства, подключённого к SPI (в данном случае - цепочка микросхем Max7219)
Код
template<int chip_count, typename cs_pin>
class TMax7219
{
    private:
        spi_base_t& spi;
        typedef cs_pin CS;
        inline void select(void) { spi.lock(); CS::On(); }
        inline void deselect(void) { CS::Off(); spi.unlock();  }
        inline void write(uint16_t w) { spi << w; }
        void write_all(uint16_t w) {
            select();
            for (int i = chip_count; i; i--)
                write(w);
            deselect();
        }
    public:
        TMax7219(spi_base_t& spiref)
            : spi(spiref)
            {
                CS::Off();
                CS::Direct(OUTPUT);
            }
        void set_sleep(bool value) { write_all(value ? 0x0C00 : 0x0C01); }
        void set_test(bool value) { write_all(value ? 0x0F01 : 0x0F00); }
        void set_brightness(uint8_t value) { write_all(0x0A00 | (value & 0x0f)); }
...
}


Затем (файл hw.h):
Код
#include "pin.h"
#include "spi.h"

typedef spi_t<SPI1> TSpi1;
extern TSpi1 spi1;

#include "max7219.h"
typedef TMax7219<2, Pin<5, 4, 'L'> > TMax7219;
extern TMax7219 Max;


И, наконец, hw.cpp:
Код
TSpi1 spi1;
TMax7219 Max(spi1);



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


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

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



AHTOXA
Огромное спасибо! Как раз первое, что я собирался делать - это дисплей через SPI.
У меня уже сделан аналогичный дисплей тоже через SPI для предыдущего проекта без RTOS. Буду теперь соединять двух ёжиков sm.gif Надеюсь, что это не займёт слишком много времени.
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 11 2012, 22:54
Сообщение #59


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

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



AHTOXA
Прикинул объявление класса для дисплея. Посмотри пожалуйста с точки зрения формы и логичности. Может что-то подправить?
Код
template<typename cs_pin>
class TDisplay
{
  private:
      spi_base_t& spi;
      typedef cs_pin LCD_CS;
      
      Pin<2, 6, 'H'> LCD_RS;    // H for Data, L for Command
      
      unsigned char   *font;
      uint8_t fontnumber, fontwidth, fontheight;
      uint8_t x, y; // position on the screen
      
      inline void select(void) { spi.lock(); LCD_CS::On(); }
      inline void deselect(void) { LCD_CS::Off(); spi.unlock();  }
      inline void send(uint8_t data) { spi << data; }
      void send_array(uint8_t *data, uint16_t count)
      { select();
        for(uint16_t i=0; i<count; i++)
          spi << data[i];
        deselect();
      }
      void send_command(uint8_t *data, uint16_t count);
      void send_data(uint8_t *data, uint16_t count);
      void goto_xy(uint8_t x, uint8_t y);
  public:
      void TDisplay(uint8_t *init, spi_base_t& spiref): spi(spiref);            
      void Set_contrast(uint8_t data);
      void ClrLines(unsigned char startline, unsigned char linesnum);    // Clear number of text lines
      void ClrText(unsigned char line, unsigned char xpos, unsigned char length); // Clear part of the line

      void SetFont(uint8_t num);
      uint8_t GetFont(void);
      void putchar(unsigned char ch, uint8_t xpos, uint8_t ypos);
      void putstring(char *string, uint8_t xpos, uint8_t ypos);
      void ShowSoftFont(unsigned char num);

}


Здесь только для вывода текста. Мне пока графика не нужна.
Функции будут описаны в другом файле. Они есть в виде функций C. Надеюсь, что не придётся менять слишком много.

Блин, разрываюсь между тремя проектами: пара хардверных и этот. Скорость написания никакая. sad.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 12 2012, 03:33
Сообщение #60


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

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



По-моему, вполне. В любом случае, по ходу дела всегда можно что-то подправить/изменить/добавить.


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

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

 


RSS Текстовая версия Сейчас: 8th May 2024 - 13:26
Рейтинг@Mail.ru


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