|
scmRtos для медных чайников |
|
|
|
Feb 12 2012, 09:04
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Добрый день всем! Возникло желание - точнее, необходимось использовать многозадачность в своем проекте - вернее, или надо писать свой диспетчер (в котором я уже успел запутаться), или пользоваться чем-то готовым. Увидел scmRtos - попытался запустить демку. Пример под IAR на MSP430F2617 - у меня на плате MSP430F2410, IAR версия 5.30
Немножко подправил демку под свою плату, чтобы нужный светодиодик моргал, указал иару на MSP430F2410 - и ничего. WDT прерывание случается раза 4 (вроде как это системный таймер?), после чего программа улетает неведомо куда.
Кто-нибудь может на путь истинный наставить - что можно трогать, что нельзя. Может ли на работоспособности версия компилятора сказаться? Или, лучше всего, может у кого готовая рыба завалялась для моргания именно на этом кристалле или похожем?
|
|
|
|
|
 |
Ответов
|
Oct 11 2012, 22:54
|
Частый гость
 
Группа: Свой
Сообщений: 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. Надеюсь, что не придётся менять слишком много. Блин, разрываюсь между тремя проектами: пара хардверных и этот. Скорость написания никакая.
|
|
|
|
|
Oct 13 2012, 04:07
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676

|
Цитата(AHTOXA @ Oct 11 2012, 20:33)  по ходу дела всегда можно что-то подправить/изменить/добавить. Ну да, что и происходит. Посмотри пожалуйста. Код 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 Pin<1, 4, 'L'> LCD_RST; // Active 0, set to it during CSL uint8_t status; // 1/0 - On/Off. OLED requires to be off when not in use 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: TDisplay(uint8_t *init, spi_base_t& spiref): spi(spiref); void Set_contrast(uint8_t data); uint8_t getstatus(void); void On(void); // Because of using OLED display void Off(void); // Because of using OLED display void SetFont(uint8_t num); uint8_t GetFont(void); 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 putchar(unsigned char ch, uint8_t xpos, uint8_t ypos); void putstring(char *string, uint8_t xpos, uint8_t ypos); void ShowFont(unsigned char num); } И несколько начальных функций. Не надо-ли что-то подправить? Хотелось бы понять перед тем, как перейду к описанию public функций. И по-моему в конструкторе класса у меня наверняка есть грубые ошибки в синтаксисе, поскольку пишу по остаткам памяти многолетней давности. Массив init приведён просто для референса. С ним как раз более-менее всё понятно.  Да, в качестве основы взят найденный на инете драйвер некоего аналогичного графического дисплея, некоторые комментарии не переведены  Код const uint8_t init[] = {0x40, //Display start line 0 0xa1, //ADC reverse <<<< Probably need to be changed 0xc0, //Normal COM0...COM63 0xa6, //Display normal 0xa2, //Set Bias 1/9 (Duty 1/65) 0x2f, //Booster, Regulator and Follower On 0xf8, //Set internal Booster to 4x 0x00, 0x27, //Contrast set 0x81, 0x16, 0xac, //Set indicator 0x00, //0x01, 0xAF, //}; //Display on 0xb0, //Page start sddress 0 0x10, //Set Higher Column Start Address 0 0x00 //Set Lower Column Start Address 0 };
/**************** Functions **************************************************/
void TDisplay::send_command(uint8_t *data, uint16_t count) { LCD_RS::Off(); // switch to send command send_array(data, count); // SPI CS controlled inside this function }
void TDisplay::send_data(uint8_t *data, uint16_t count) { LCD_RS::On(); // switch to send data send_array(data, count); // SPI CS controlled inside this function }
// Set symbol position in text mode //Parameter: // x: X - Position on screen (0 - 127) // y: Y - Position on screen (0 - 8) void TDisplay::goto_xy(uint8_t x, uint8_t y); { uint8_t set[] = {0xb0, 0x10, 0x00}; //Control commands array set[0] += y; //Y - Add Y Position to Set Page Start Address set[1] += x >> 4; //High - Nibble auf Steuerbefehl addieren set[2] += x & 0x0f; //Low - Nibble auf Steuerbefehl addieren send_command(set, 3); }
//TDisplay constructor TDisplay::TDisplay(uint8_t *init, spi_base_t& spiref): spi(spiref) { LCD_RST::Off(); // unreset LCD send_command((uint8_t *)init, sizeof(init)); // Initialization
for(uint8_t line=0; line<8; line++) // clear display memory { goto_xy(0, line); spiref.select(); send(0); spiref.deselect(); } }
|
|
|
|
Сообщений в этой теме
varvar scmRtos для медных чайников Feb 12 2012, 09:04 varvar Ok, кажется загрузка новой версии (4.0) немного по... Feb 12 2012, 14:56 dxp QUOTE (varvar @ Feb 12 2012, 21:56) Ok, к... Feb 12 2012, 16:34 varvar Цитата(dxp @ Feb 12 2012, 19:34) А зачем ... Feb 12 2012, 18:11 dxp QUOTE (varvar @ Feb 13 2012, 01:11) так н... Feb 13 2012, 06:27 varvar Я с примеров и начинал - с моей версией ИАРа и 3.1... Feb 13 2012, 16:17 dxp QUOTE (varvar @ Feb 13 2012, 23:17) Я с п... Feb 14 2012, 03:52 varvar Попытаюсь воспользоваться еще раз добротой и отзыв... Feb 14 2012, 20:04 a9d Почитай статьи по потокам. Это фактически тоже сам... Feb 14 2012, 20:48 dxp 1. В процессе ждать флаг события от таймера, когда... Feb 15 2012, 05:04 tamam Здравствуйте. Чтобы не плодить лишних тем решил от... Feb 22 2012, 06:18 AHTOXA Цитата(tamam @ Feb 22 2012, 12:18) За осн... Feb 22 2012, 08:10  tamam Цитата(AHTOXA @ Feb 22 2012, 12:10) Ага. ... Feb 22 2012, 09:12 ReAl У меня всё уже работает (1-EventFlag и 4-Debug и н... Feb 22 2012, 08:05 ReAl Цитата(ReAl @ Feb 22 2012, 10:05) Если за... Feb 22 2012, 17:55  tamam Спасибо, буду разбираться дальше. Feb 22 2012, 19:02 ReAl Прошу прощения за задержку. 23-го первый пример бы... Feb 26 2012, 11:55 tamam Спасибо за оперативность. Разбираюсь.... Feb 27 2012, 12:46 ReAl 4-Debug уже там же. Mar 1 2012, 14:28 varvar Товарищи гуру и приближенные к ним!
Помогите р... Jul 12 2012, 08:29 ReAl Как-то так.
Кодvoid SleepUntil(tick_count_t ti... Jul 12 2012, 08:54 varvar Спасибо, когда пояснили, все стало так очевидно... Jul 12 2012, 09:22 Посторонним В... доброго времени днутра или ночера...
есть комплек... Aug 3 2012, 09:06 _Артём_ Цитата(Посторонним В... @ Aug 3 2012, 12... Aug 3 2012, 10:53 Посторонним В... Цитата(_Артём_ @ Aug 3 2012, 11:53) Приме... Aug 6 2012, 08:12 _Артём_ Цитата(Посторонним В... @ Aug 6 2012, 11... Aug 6 2012, 10:34 _Артём_ Цитата(Посторонним В... @ Aug 6 2012, 11... Aug 6 2012, 12:58  Посторонним В... Цитата(_Артём_ @ Aug 6 2012, 13:58) Updat... Aug 7 2012, 08:06   _Артём_ Цитата(Посторонним В... @ Aug 7 2012, 11... Aug 7 2012, 09:56    Посторонним В... Цитата(_Артём_ @ Aug 7 2012, 10:56) Больш... Aug 16 2012, 08:57     _Артём_ Цитата(Посторонним В... @ Aug 16 2012, 11... Aug 16 2012, 11:39     AHTOXA Цитата(Посторонним В... @ Aug 16 2012, 14... Aug 16 2012, 15:44      Посторонним В... Цитата(AHTOXA @ Aug 16 2012, 15:44) Разра... Aug 21 2012, 03:43       AHTOXA У вас, похоже, не работает прерывание от системног... Aug 21 2012, 04:07        Сергей Борщ QUOTE (AHTOXA @ Aug 21 2012, 07:07) У вас... Aug 21 2012, 05:26 Посторонним В... выкладываю исходники Aug 21 2012, 06:31 _Артём_ Цитата(Посторонним В... @ Aug 21 2012, 09... Aug 21 2012, 20:37  Посторонним В... Цитата(_Артём_ @ Aug 21 2012, 20:37) Стра... Aug 22 2012, 04:26 varvar На очередные грабли наступил. В ИАРе для 430 стОит... Sep 6 2012, 18:50 ReAl Если подозрение на стек -- увеличить стек для проц... Sep 6 2012, 20:36 varvar Цитата(ReAl @ Sep 6 2012, 23:36) Если под... Sep 8 2012, 16:17 Chudik Помогите пожалуйста определиться со структурой про... Oct 3 2012, 02:09 dxp Никто, кроме вас, не знает, как лучше распределить... Oct 4 2012, 04:35 Chudik dxp
Спасибо за ответ.
Про общее правило - это-то ... Oct 4 2012, 19:31 _Артём_ Цитата(Chudik @ Oct 4 2012, 22:31) Ага, с... Oct 4 2012, 20:10  Chudik Цитата(_Артём_ @ Oct 4 2012, 13:10) Ну да... Oct 4 2012, 21:11 Chudik Не нашёл в документации других членов класса proce... Oct 4 2012, 23:54 _Артём_ Цитата(Chudik @ Oct 5 2012, 02:54) Не наш... Oct 5 2012, 00:35 Chudik Ага, спасибо, нашёл в доке. Oct 5 2012, 02:17 Chudik Возможно глупый вопрос: может ли mutex быть членом... Oct 5 2012, 14:22 _Артём_ Цитата(Chudik @ Oct 5 2012, 17:22) может ... Oct 5 2012, 14:27  AHTOXA Локальной тоже может.
Например, представьте, что у... Oct 5 2012, 16:41   _Артём_ Цитата(AHTOXA @ Oct 5 2012, 19:41) Локаль... Oct 5 2012, 17:03   Chudik Цитата(AHTOXA @ Oct 5 2012, 09:41) У меня... Oct 5 2012, 23:59    _Артём_ Цитата(Chudik @ Oct 6 2012, 02:59) Вот, в... Oct 6 2012, 01:03     Chudik Цитата(_Артём_ @ Oct 5 2012, 18:03) А чем... Oct 6 2012, 03:07    AHTOXA Цитата(Chudik @ Oct 6 2012, 05:59) Можно ... Oct 6 2012, 08:53 Chudik AHTOXA
Огромное спасибо! Как раз первое, что я... Oct 6 2012, 20:25   AHTOXA Я, честно говоря, не совсем понимаю, что я должен ... Oct 13 2012, 05:10 Chudik Ну, вот такие замечания и нужны Спасибо.
Естестве... Oct 13 2012, 18:54 AHTOXA Цитата(Chudik @ Oct 14 2012, 00:54) А поч... Oct 15 2012, 03:26 Chudik AHTOXA
получил сообщение в IAR
КодError[Pe020... Oct 17 2012, 23:45 AHTOXA Я в IAR-е не копенгаген Oct 18 2012, 03:30 Сергей Борщ QUOTE (Chudik @ Oct 18 2012, 02:45) ident... Oct 18 2012, 05:54 Chudik Посмотрел опции компиляции. Там стоял автоматическ... Oct 18 2012, 18:40 AHTOXA А в файле M3_Terminal.h есть строчка
Код#include ... Oct 18 2012, 18:52 Chudik Конечно:
Код#ifndef M3_TERMINAL_H
#define M3_TERMI... Oct 18 2012, 19:36 AHTOXA Хм. Странно.
1. Возможно где-то ещё есть объявлени... Oct 18 2012, 19:49  Chudik Разобрался, мой косяк был - кросс ссылки на файлы ... Oct 18 2012, 21:00  _Артём_ Цитата(AHTOXA @ Oct 18 2012, 22:49) в ИАР... Oct 18 2012, 21:20 AHTOXA Цитата(Chudik @ Oct 19 2012, 03:00) в соо... Oct 19 2012, 04:54 Chudik Цитата(AHTOXA @ Oct 18 2012, 21:54) Ну и ... Oct 19 2012, 20:22  _Артём_ Цитата(Chudik @ Oct 19 2012, 23:22) Угу, ... Oct 19 2012, 23:00 Chudik Ничего не понимаю
КодError[Pe020]: ide... Oct 26 2012, 22:32 AHTOXA Это же GCC-шные названия файлов и регистров у меня... Oct 26 2012, 23:21 Chudik Логично, конечно.
Сейчас посмотрю. Мне казалось, ч... Oct 26 2012, 23:57 Chudik Регистры переназначил. Функцию rw для SPI подправи... Oct 27 2012, 03:18 AHTOXA 1. spi_base_t - это не шаблонный класс, не надо к ... Oct 27 2012, 05:43 Chudik Ага, спасибо, поменял. Полегчало.
Соотвественно, ... Oct 27 2012, 05:53 dezna добрый день!
появилась необходимость использов... Jan 21 2013, 10:38 AHTOXA Светодиоды в 1-EventFlag мигают быстро-быстро, гла... Jan 21 2013, 11:10  dezna Цитата(AHTOXA @ Jan 21 2013, 15:10) Свето... Jan 21 2013, 11:17   AHTOXA В вашем листинге нет упоминания о конструкторах. П... Jan 21 2013, 16:22    dezna Цитата(AHTOXA @ Jan 21 2013, 20:22) В ваш... Jan 22 2013, 04:58     AHTOXA Цитата(dezna @ Jan 22 2013, 10:58) COLLEC... Jan 22 2013, 05:47      dezna Цитата(AHTOXA @ Jan 22 2013, 09:47) Код ... Jan 22 2013, 06:21       AHTOXA Сложно сказать. Листинг практически идентичен моем... Jan 22 2013, 08:20        dezna Цитата(AHTOXA @ Jan 22 2013, 12:20) Сложн... Jan 22 2013, 10:11         AHTOXA Цитата(dezna @ Jan 22 2013, 16:11) но не ... Jan 22 2013, 10:57          dezna Цитата(AHTOXA @ Jan 22 2013, 14:57) Я доб... Jan 22 2013, 11:14          IgorKossak Цитата(AHTOXA @ Jan 22 2013, 12:57) Я пои... Jan 22 2013, 11:49           demiurg_spb Цитата(IgorKossak @ Jan 22 2013, 15:49) Н... Jan 22 2013, 12:58            IgorKossak Цитата(demiurg_spb @ Jan 22 2013, 14:58) ... Jan 22 2013, 13:26           AHTOXA Цитата(IgorKossak @ Jan 22 2013, 17:49) Н... Jan 22 2013, 14:04 IgorKossak Для сборки под Cortex-Mx пользуюсь тулчейном от Li... Jan 22 2013, 08:32 mdmitry Цитата(IgorKossak @ Jan 22 2013, 11:32) Д... Jan 22 2013, 10:24 dezna Цитата(IgorKossak @ Jan 22 2013, 12:32) Д... Jan 22 2013, 10:28
2 страниц
1 2 >
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|