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

 
 
10 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> scmRtos для медных чайников
_Артём_
сообщение Aug 16 2012, 11:39
Сообщение #31


Гуру
******

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



Цитата(Посторонним В... @ Aug 16 2012, 11:57) *
описание регистров и системных переменных совершенно разное ...

Регистры ядра одни и те же?
Какие ещё системные переменные? О чём вы?

Цитата(Посторонним В... @ Aug 16 2012, 11:57) *
может быть различное количество переферии, разные векторы прерываний и прочее...

Стартап нужен соответствующий.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 16 2012, 15:44
Сообщение #32


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

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



Цитата(Посторонним В... @ Aug 16 2012, 14:57) *
хотелось бы наладить связь с разработчиками этой освр для того чтоб допилить по ума этот порт...

Разработчики все здесь, так что, считайте, связалисьsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Aug 21 2012, 03:43
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(AHTOXA @ Aug 16 2012, 15:44) *
Разработчики все здесь, так что, считайте, связалисьsm.gif


Антон, хотелось бы с вашей помощью "допилить" порт cortex-m0 для stm32f0xx до рабочего состояния...
ну и опубликовать естественно...

сейчас нахожусь на этапе...
sturtup, ld-script, sysinit переписаны... остольное взято с сайта...
с этими файлами перекомпилил и запустил демку для дискавери... (дефолтная)
т.е. файлы вроде как рабочие...

проблема такая...
при запуске системы работает только одна задача - первая...
и не работает функция sleep();

похоже контекст не переключается...
платформо зависимую часть брал из "ветки"
демку и настройки системы взял от stm32f2xx...

как с вами Антон связаться...??? кроме как в форуме ??? думаю работа пошла бы оперативнее..
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 21 2012, 04:07
Сообщение #34


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

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



У вас, похоже, не работает прерывание от системного таймера. Возможно, не совпадает имя обработчика с именем в таблице векторов. Выложите проект сюда, посмотрим, в чём может быть дело.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 21 2012, 05:26
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AHTOXA @ Aug 21 2012, 07:07) *
У вас, похоже, не работает прерывание от системного таймера.
Скорее прерывание переключения контекста.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Aug 21 2012, 06:31
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



выкладываю исходники
Прикрепленные файлы
Прикрепленный файл  Test_2012_08_21_08_26_10.7z ( 449.39 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 21 2012, 20:37
Сообщение #37


Гуру
******

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



Цитата(Посторонним В... @ Aug 21 2012, 09:31) *
выкладываю исходники

Странно, не собирается:
Цитата
./src/main.cpp:47:23: fatal error: stm32f0xx.h: No such file or directory
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Aug 22 2012, 04:26
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(_Артём_ @ Aug 21 2012, 20:37) *
Странно, не собирается:


сори...
надо src и мэйк в папку проекта бросить как у примеров РТОС
ну или мэйк надо немного поправить
Go to the top of the page
 
+Quote Post
varvar
сообщение Sep 6 2012, 18:50
Сообщение #39


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

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



На очередные грабли наступил. В ИАРе для 430 стОит в Library Option для Printf поставить вместо Tiny Large - и та же программа, которая благополучно работала раньше, виснет. Похоже, что-то со стеком. Понятно дело, что float и тем более printf - это не спортивно, но все же... Как бы с этих грабель уйти?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 6 2012, 20:36
Сообщение #40


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Если подозрение на стек -- увеличить стек для процесса, использующего printf


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
varvar
сообщение Sep 8 2012, 16:17
Сообщение #41


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

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



Цитата(ReAl @ Sep 6 2012, 23:36) *
Если подозрение на стек -- увеличить стек для процесса, использующего printf


Действительно, очевидное решение. И ведь даже увеличивал - но не думал, что надо так сильно увеличить. 500 байт хватило.
Спасибо!
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 3 2012, 02:09
Сообщение #42


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

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



Помогите пожалуйста определиться со структурой процессов, потоков данных и приоритетами для процессов.

Есть следующий дизайн:
Удалённый терминал сбора данных.
Состав:
- Процессор MSP430F210
- Связь с хостом по RS485-slave (используется ModBus, но это непринципиально). (UART)
- Связь головкой сбора данных по RS485-master (UART)
- Пользовательский интерфейс: 4 кнопки и 3-4 строчный графический дисплей. Связь с ним по SPI через расширитель. При нажатии на кнопки вырабатываются прерывания.
- Управление 3мя реле через GPIO
- Внешний RTC с интерфейсом I2C. RTC может вырабатывать прерывания. Скажем, раз в секунду.
- Внутренняя используемая периферия: 3 канала PWM для медленно меняющихся сигналов, ADC для отслеживания уровня питания, внтуренний EEPROM

По первой прикидке представляется следующее (в порядке приоритета)
  1. RS485_Slave_Proc - включает в себя обработку прерываний от UART, чтение команды/данных от хоста и соответствующее реагирование на них. Использует channel для передачи и приёма данных в/из DataProcessing_Proc. Длина канала TBD.
  2. DataProcessing_Proc - фактически коммутатор данных между процессами с декодером команд. Формирует необходимые данные для периферии в нужных форматах.
  3. UI_Proc - Обслуживание пользовательского интерфейса. Включает в себя обработку прерываний от SPI. Использует message для передачи кода нажатой кнопки в DataProcessing и channel для передачи отображаемой информации на дисплей. Отображаемая информация пока только текстовая, т.е. этот процесс содержит в себе декодер ASCII в графику.
  4. RS485_Master_Proc - Включает в себя обработку прерываний от UART. Но не для скорости ответа, а для того, чтобы можно было послать запрос и заниматься остальными делами пока не появится ответ. Как вариант, можно и без прерываний, т.е. в одном цикле запросил данные, в следующем - проверил и если есть, то забрал. Использует, скорее всего, message.
  5. LowSpeed_Proc - включает в себя обработку прерываний от RTC (раз в секунду или минуту) и считает время до следующего обслуживания , по данным от DataProcessing включает и выключает реле, по данным от него же выставляет новые значения на PWM, работает с EEPROM, читает АЦП, измеряющее напряжение питания. Передача данных через структурированные мессаджи, т.е. message представляет из себя структуру необходимых данных.

Сразу возникают несколько вопросов:
- Не имеет ли смысла UI_Proc разделить на отдельные процессы работы с кнопками и дисплеем даже при том, что они используют один физический интерфейс?
- Имеет ли смысл вынести в отдельные процессы работу с RTC (редко) и с EEPROM (долго - надо ждать флага). Или просто внутри одного процесса пройти по всей этой периферии, благо всё это медленно? А может и RS485_Master вставить в LowSpeed?
-
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 4 2012, 04:35
Сообщение #43


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Никто, кроме вас, не знает, как лучше распределить ресурсы в программе под вашу задачу. Общее правило такое: всё, что не может ждать, помещать в более приоритетные процессы, чем срочнее, тем приоритетнее. Какие там конкретно требования по времянкам, это вам известно, от этого и отталкивайтесь.

По поводу пользовательского интерфейса - тоже вам виднее, но я бы не разделял, кнопки не по прерываниям обрабатывал, а по опросу, синхронизированному с основным циклом UI.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 4 2012, 19:31
Сообщение #44


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

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



dxp
Спасибо за ответ.
Про общее правило - это-то понятно. Не вчера за программирование микроконтроллеров сел sm.gif Собственно я и прикинул структуру из общих соображений и понимания того, что мне надо. Да и вообще, изложенное на бумаге/в форуме позволяет лучше сформировать собственное понимание того, что надо sm.gif
Просто некоторые тонкости работы с вашей системой могут быть таковы, что варианты могут быть разными. Тем более, если эти тонкости могут быть указаны авторами системы. В частности, совет по поводу опроса кнопок по опросу учту. Сейчас у себя поменяю инициализацию.

Но вот вопрос совмещения или разделения кнопок и дисплея в олдном процессе остался. Основное в нём то, что используется один SPI. Стоит на этом базироваться или просто иметь в виду, что это единый ресурс для двух процессов, которые всегда вызываются в разное время?

Я пока сделал следующее объявление:
Код
//---------------------------------------------------------------------------
//
//      Process types
//
typedef OS::process<OS::pr0, 200> TProc1;
typedef OS::process<OS::pr1, 200> TProc2;
typedef OS::process<OS::pr2, 200> TProc3;
typedef OS::process<OS::pr3, 200> TProc4;
typedef OS::process<OS::pr4, 200> TProc5;
//---------------------------------------------------------------------------
//
//      Process objects
//
TProc1 RS485Slave_Proc;     // interface to a host
TProc2 DataProcessing_Proc;
TProc3 UI_Buttons_Proc;     // reading buttons status
TProc4 UI_TextDisplay_Proc; // display text information
TProc5 LowSpeed_Proc;       // Relay, RTC, PWM (4-20mA control), Power ADC, EEPROM, RS485 master


Ага, сейчас понял, что для случая, который я сейчас показал, для SPI должен использоваться Mutex. Я прав?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 4 2012, 20:10
Сообщение #45


Гуру
******

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



Цитата(Chudik @ Oct 4 2012, 22:31) *
Ага, сейчас понял, что для случая, который я сейчас показал, для SPI должен использоваться Mutex. Я прав?

Ну да. Через mutex обычно и делается.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 22:10
Рейтинг@Mail.ru


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