Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
1

вопрос по Di Halt Rtos.

17.03.2016, 23:15. Показов 6077. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
проц.: atmega8a
os: DiHalt Rtos
проблема: незапускается.
инициализация проходит и начинается тупить в while(1) не доходя до TaskManager;
проект прикладываю.

[39.27 Кб]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2016, 23:15
Ответы с готовыми решениями:

Творческий вопрос! Прерывания в RTOS
Есть процессор с операционкой RTOS, но не стандартной, а специально написанной производителем под...

DI HALT rtos
Уже задавал вопрос, но не получил ответа. Мне надо организовать регулировку яркости...

Вопрос по RTOS
Сразу приношу извинения, если пишу не в ту тему. Вопрос в следующем: как в RTOS ( в той, что в...

Вопрос по RTOS
Есть две задачи с однаковым приоритетом. Хочу чтобы полностью завершилась задача 1, затем ...

atmega8535, RTOS, interrupts, вопрос
Здравствуйте, установил ОС, которую выкладывал Ди и возник следующий вопрос. Переделал ОС на...

9
0 / 0 / 0
Регистрация: 30.12.2011
Сообщений: 24
17.03.2016, 23:22 2
может таймер не работает?

я у себя использовал http://we.iosyitistromyss.ru/Soft/dyspe ... tcher.html
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
18.03.2016, 00:08 3
Цитата Сообщение от shytow
может таймер не работает?
пашет однако...
я у себя использовал http://we.iosyitistromyss.ru/Soft/dyspe ... tcher.html
не... то что я сейчас использую прекрасно работет в пяти железках и всё ок.
на атмеге8 только первый раз запустил.
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
18.03.2016, 00:16 4
Код
// Инициализируем ядро
InitRTOS;                  // в  файле <EERTOS.c>
// Инициализируем внутреннюю периферию контроллера
InitOtt;                  // в файле <HAL.c>
// Старт ядра.
RunRTOS;
При вызове функций после имени функции нужно обязательно скобки (), иначе это просто указатель.
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
18.03.2016, 00:17 5
ларчик просто открывался.
функции надо вызывать со скобками

InitRTOS();
InitOtt();
RunRTOS();
InitLeds();

а не без.

InitRTOS;
InitOtt;
RunRTOS;
InitLeds;

где угодно. особенно в прерываниях.
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
18.03.2016, 00:18 6
Цитата Сообщение от itysiy
Код:
// Инициализируем ядро
InitRTOS; // в файле <EERTOS.c>
// Инициализируем внутреннюю периферию контроллера
InitOtt; // в файле <HAL.c>
// Старт ядра.
RunRTOS;
При вызове функций после имени функции нужно обязательно скобки (), иначе это просто указатель.
на полминуты опередили)

спасибо!)

+1 к экспе
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
23.03.2016, 12:14 7
есть шаговый двигатель. управляется через L293 напрямую с контроллера. то есть каждый вывод контроллера подключён к базе транзистора.

в Di Halt Rtos написал четыре вот таких процедуры:

Код
void QuoterStep_1(void)
{
SetByt(DRIVE_PORTD,DRIVE_PIN_0);
ClearByt(DRIVE_PORTD,DRIVE_PIN_1);
ClearByt(DRIVE_PORTB,DRIVE_PIN_2);      // <-- порт B
ClearByt(DRIVE_PORTD,DRIVE_PIN_3);
SetTimerTask(QuoterStep_2, MECH_STEP_TIME);
}

void QuoterStep_2(void)
{
ClearByt(DRIVE_PORTD,DRIVE_PIN_0);
SetByt(DRIVE_PORTD,DRIVE_PIN_1);
ClearByt(DRIVE_PORTB,DRIVE_PIN_2);      // <-- порт B
ClearByt(DRIVE_PORTD,DRIVE_PIN_3);
SetTimerTask(QuoterStep_3, MECH_STEP_TIME);
}

void QuoterStep_3(void)
{
ClearByt(DRIVE_PORTD,DRIVE_PIN_0);
ClearByt(DRIVE_PORTD,DRIVE_PIN_1);
SetByt(DRIVE_PORTB,DRIVE_PIN_2);         // <-- порт B
ClearByt(DRIVE_PORTD,DRIVE_PIN_3);
SetTimerTask(QuoterStep_4, MECH_STEP_TIME);
}

void QuoterStep_4(void)
{
ClearByt(DRIVE_PORTD,DRIVE_PIN_0);
ClearByt(DRIVE_PORTD,DRIVE_PIN_1);
ClearByt(DRIVE_PORTB,DRIVE_PIN_2);      // <-- порт B
SetByt(DRIVE_PORTD,DRIVE_PIN_3);
SetTask(MechSet1200);
}
для управления шаговым двигателем.

сейчас у меня эти процедуры вызываются несколько другими процедурами. нужно сделать так чтобы в конце QuoterStep_4 в строке SetTask(MechSet1200); на месте MechSet1200 была та самая процедура что вызвала начальную процедуру QuoterStep_1 этой цепочки.
через переменную и затем switch-case в конце считаю неспортивным.

я попытался разобраться в механизме SetTask и TaskManager. первая функция сохраняет в массиве указатель (как значение пееменой) на пользовательскую функцию, а вторая уже достаёт из массива сей указатель и выполняет кусок кода.

typedef void (*TPTR)(void); // я так думаю что это та самая переменная объявлена. точно также надо объявить свою(?)
а как вызывать такую весчь? у Ди токль
(GoToTask)(); // Переходим к задаче
и всё.

то есть для того чтобы реализовать задуманное мне надо объявить некую переменную(?какой тип?) затем до вызова QuoterStep_1 присвоить ей значение указателя процедуры/функции.
а затем в QuoterStep_4 на месте строки SetTask(MechSet1200) сделать SetTask(nasha_perennaya)

кто может подсказать как это сделать?
или какие разделы по Си и Си++ читать?
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
24.03.2016, 11:47 8
разобрался.
в хидере объявил
typedef void (*DPDR)(void);

в коде сделал глобальную переменную с пустышкой по умолчанию
DPDR GoToTaskAfter = Idle;

и вызываем цепочку процедур (1->2, 2->3,3->4) через диспетчер задач с присвоением переменной GoToTaskAfter = OurProcedure ;
получется (OurProcedure->1, 1->2, 2->3, 3->4 ,4->GoToTaskAfter )
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
24.03.2016, 12:22 9
2Orsomum. Мне кажется, у вас изначально путь решения задачи не верный. Отсюда выходит эта акробатика с указателями. Но чтоб сказать как это сделать лучше, нужно знать всю задачу.
0
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
25.03.2016, 22:35 10
Цитата Сообщение от itysiy
2Orsomum. Мне кажется, у вас изначально путь решения задачи не верный. Отсюда выходит эта акробатика с указателями. Но чтоб сказать как это сделать лучше, нужно знать всю задачу.
файл ...\Clock_1Dryve_board_v2\Clock_1Dryve_board_v2\Clock_Mechamysm\Clock_Mechamysm. c
ВНИМАНИЕ! Возможны рвотные позывы при просмотре этого кода.
суть - двигателем могут щёлкать разные задачи. чтобы не плодить строк кода и стали нужни все эти прыжки и ужимки.

[69.39 Кб]
0
25.03.2016, 22:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2016, 22:35
Помогаю со студенческими работами здесь

Вопрос к DI HALT. Использование PB II для отладки STM32F429!
Имею плату PinBoard II c модулем STM32F103 и недавно приобрел плату STM32F429I-Dysco. Хочу...

Halt (n),
Решить уравнение используя безусловную функцию Halt (n).

ФУНКЦИЯ HALT
Найти произведение первых k натуральных чисел, кратных трём. Используя безусловную функцию &quot;halt&quot;.

Embedded (2 Di Halt)
Я вот тут подумал, о чем давно желал... (на правах бизнес-идеи) Навеяно темой Лично я, имею 3...

Оператор HALT
Дан код.Задача:проверить сбалансированность скобок.Чем можно заменить тут оператор halt? program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru