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

 
 
18 страниц V  « < 14 15 16 17 18 >  
Reply to this topicStart new topic
> Начало работы with scmRTOS, Несколько вопросиков
_Артём_
сообщение Mar 9 2013, 22:43
Сообщение #226


Гуру
******

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



Цитата(WHALE @ Mar 10 2013, 00:20) *
не-не не. у меня специально 2 фоновый процесс создан-там светик моргает,
значит задачи переключаются.

Может и так, ведь проекты у нас не совсем одинаковые, так как версии Иара разные и не все файлы есть.
Эти строки из OS_Target_asm.s90
Цитата
#include "D:\Viktor\Проекты\микроконтроллеры\AVR-8\Progekts IAR\scm_rtos\snmp\soft\scm_rtos_Config\scmRTOS_CONFIG.h"
#include "D:\Viktor\Проекты\микроконтроллеры\AVR-8\Progekts IAR\scm_rtos\snmp\soft\scm_rtos_Config\scmRTOS_TARGET_CFG.h"

пришлось закоментировать, потому как у меня нет этих файлов...


Цитата(WHALE @ Mar 10 2013, 00:20) *
и в порт раз в 8секунд вывод идет-но только 1 байт,а не 5- в прерывание не заходит.

8 секунд - не период ватчдога случайно?

Цитата(WHALE @ Mar 10 2013, 00:20) *
А симулятору ОС крышу сносит напрочь своим переключением стековых фреймов,это да.

Не замечал такого - чтобы сносило, но мало ли, может и так.
То есть у вас вектор номер 0x6C в таблице есть?

Цитата(WHALE @ Mar 10 2013, 00:20) *
Ладно,пора спать,утро вечера мудренее...

Тоже дело...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 11 2013, 20:03
Сообщение #227


Гуру
******

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



Цитата(WHALE @ Mar 10 2013, 00:20) *
не-не не. у меня специально 2 фоновый процесс создан-там светик моргает,
значит задачи переключаются.
и в порт раз в 8секунд вывод идет-но только 1 байт,а не 5- в прерывание не заходит.


Получается, что если в scmRTOS_CONFIG.h (для АВР)
Код
#define scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 0

, то в context_switch_hook не будет вызвана функция
Код
INLINE void block_context_switch() { SPM_CONTROL_REG &= ~(1 << SPMIE); } // disable SPM interrupt

и прерывание SPM будет происходить всегда и к тому же будут блокированы все вектора с номером большим, чем SPM.
То есть для АВР scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE должно быть равным 1, если используется переключение с помощью прерываний на векторе SPM. Тогда он не совсем user_hook - без него программа работать не будет?

В проекте WHALE прерывание USART1_TX не отрабатывается, потому что его приоритет ниже чем у прерывания SPM, которое не отключается после переключения контекста.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 12 2013, 11:01
Сообщение #228


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Нет,Артем,все как всегда оказалось значительно проще.
РТОС вообще не причем.
на 3 сутки я обнаружил,что в камере нет одной стены упростил проект еще-убрал РТОС- и охренел,увидев что прерывание по концу передачи uart1 все-равно не работает.Стал восстанавливать порядок действий-доРТОС-ный вариант
у меня был собран на меге164.Но ОЗУ там было в обрез и при перепиливании на вариант с РТОС я перешел на 324.
И наткнувшись на этот баг решил,но виновата ОСЬ.
Сейчас проделал следующий эксперимент-достал плату с 164 мегой,сомпилировал под неё(не трогая кода)-все работает!!!
Компилю тот-же код под 324-не работает. wub.gif
Ставлю версию IAR 6.12.1 - работает все.
Вывод мой такой-что-то в версии 6.20 яровцы порушили для 324 меги.
се ля ви...


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 12 2013, 11:48
Сообщение #229


Гуру
******

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



Цитата(WHALE @ Mar 12 2013, 13:01) *
Нет,Артем,все как всегда оказалось значительно проще.
РТОС вообще не причем.

Может и так.
Я запускал ваш проект в симуляторе, вроде работало правильно, но как он в железе поведёт - вопрос.


Цитата(WHALE @ Mar 12 2013, 13:01) *
И наткнувшись на этот баг решил,но виновата ОСЬ.

Думаю, что она и виновата. Вернее неправильная настройка ОСи.
Обратите внимание на значение макроса scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE. Мне кажется, если он будет равен 0, то работа системы сильно замедлится и частично может быть заблокирована. Или я неправ?

Цитата(WHALE @ Mar 12 2013, 13:01) *
Вывод мой такой-что-то в версии 6.20 яровцы порушили для 324 меги.
се ля ви...

На компиляторописателей думать - последнее дело, хотя всякое бывает...
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 12 2013, 12:34
Сообщение #230


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(_Артём_ @ Mar 12 2013, 15:48) *
Думаю, что она и виновата. Вернее неправильная настройка ОСи.
Обратите внимание на значение макроса scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE. Мне кажется, если он будет равен 0, то работа системы сильно замедлится и частично может быть заблокирована. Или я неправ?


На компиляторописателей думать - последнее дело, хотя всякое бывает...

Артем, еще раз.Я вчера выкинул из проекта ось и прерывание USART1_TX_vect все равно не
работало.Этот -же код скомпилированный этим-же компилятором с теми-же опциями
под мегу 164 работает.
В iar 6.12 этот-же код скомпилированный с теми-же опциями работает и на 324 тоже.
Да,в боевом проекте при попытке выбора меги324p iar выдавал внутреннюю ошибку.
имхо,виноват iar.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 6 2013, 14:32
Сообщение #231





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Здравствуйте!
Помогите новичку. У меня проблема с запуском scmRTOS. Работаю я в Eclpse с компилятором GCC-ARM. В чем состоит суть моей задачи используя библиотеку mbed(mbed) запустить scmRTOS на этом деваисе LPC1768 используя для компиляций Eclipse. Ниже загрузил проект, он компилируется даже запускается но виснет на первой задаче. Если заметите то в програме прописаны пересылки через UART, так вот на выходе я получяю "Hello\r\nS", и диоды не мигают, тут програма и виснет. Помогите разобраться пожалуйста. Укажите куда копать код.
Заранее спасибо за помощь!!!

Прикрепленный файл  Myprog.zip ( 276.76 килобайт ) Кол-во скачиваний: 74


Сообщение отредактировал Romcik077 - Apr 6 2013, 14:33
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 6 2013, 18:18
Сообщение #232


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

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



Вы используете стартовый код от mbed: mbed/LPC1768/GCC_ARM/startup_LPC17xx.o. (Там что, нет исходников?).
В нём используемые осью прерывания называются
SysTick_Handler и PendSV_Handler.
А в оси они называются иначе:
SystemTimer_ISR и PendSVC_ISR.
Соответственно, надо либо найти исходник от startup_LPC17xx.o и переименовать там, либо править в исходниках оси.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 6 2013, 20:21
Сообщение #233





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Цитата(AHTOXA @ Apr 6 2013, 22:18) *
Вы используете стартовый код от mbed: mbed/LPC1768/GCC_ARM/startup_LPC17xx.o. (Там что, нет исходников?).
В нём используемые осью прерывания называются
SysTick_Handler и PendSV_Handler.
А в оси они называются иначе:
SystemTimer_ISR и PendSVC_ISR.
Соответственно, надо либо найти исходник от startup_LPC17xx.o и переименовать там, либо править в исходниках оси.

Спасибо за быстрый ответ.
К сожалению исходников LPC17xx.o нет, самому хотелось но нету. Так что пришлось менять исходники scmRTOS(ниже выложен измененый проект), изменил в трех файлах OS_Target_asm.S, scmRTOS_TARGET_CFG.h и OS_Target_cpp.cpp, но к сожалению это много не помогло. С помощью debugger-а проверил, прерывания пошли, но все равно виснет, вроде нашел точку блокировки но не знаю как исправить, останавливается он на коде: INLINE void disable_context_switch() { disable_interrupts(); }, в фаиле OS_Target.h, по краиней мере debugger зависает после этой строчки кода.
Прикрепленный файл  Myprog.zip ( 277.8 килобайт ) Кол-во скачиваний: 74

Забыл спросить прерывания PendSV_Handler тоже должны происходить переодически? Потому-что во время debugging-а ни разу ни вызывалось это прерывание, может в этом проблема?

Сообщение отредактировал Romcik077 - Apr 6 2013, 20:24
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 6 2013, 21:49
Сообщение #234


Гуру
******

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



Цитата(Romcik077 @ Apr 6 2013, 23:21) *
исправить, останавливается он на коде: INLINE void disable_context_switch() { disable_interrupts(); }, в фаиле OS_Target.h, по краиней мере debugger зависает после этой строчки кода.

У вас там не зашищённый режим (thread mode)?

Цитата(Romcik077 @ Apr 6 2013, 23:21) *
Забыл спросить прерывания PendSV_Handler тоже должны происходить переодически?

Это прерывание возникает когда нужно передать управление другой задаче. Если оно у вас не происходит, то возможно раньше ошибка где-нибудь произошла.


Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 6 2013, 22:01
Сообщение #235





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Цитата
У вас там не зашищённый режим (thread mode)?

Вы имеете в виду что не разрешается выполнение кода ассемблера? Вроде нет функция os_start из OS_Target_asm.S нормально проходит.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 6 2013, 22:52
Сообщение #236


Гуру
******

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



Цитата(Romcik077 @ Apr 7 2013, 01:01) *
Вы имеете в виду что не разрешается выполнение кода ассемблера? Вроде нет функция os_start из OS_Target_asm.S нормально проходит.

Наверное моё предположение о thread-режиме неправильное.

disable_context_switch вызывается вроде только в функции TKernel::sched. То есть туда попадает? У вас HardFault не возникает какой-нибудь? Вы можете заменить их обработчик на свой и посмотреть адрес где возникает ошибка?

P.S. Интересно просто...зачем он - mbed, если он без исходников.
Что делать в случае ошибки в либе? Можно заменить своей? Какие ресурсы процессора либа использует и как(DMA и тд)? Можно ли заменить их реализацию своей?
Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 6 2013, 23:12
Сообщение #237





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Я решил заменить стартовые и системные библиотеки на те что даны в примере для LPC17xx. Помогите чтоб не ошибится что нужно заменить для компиляций. Вроде как startup_LPC17xx.o -> startup.c, system_LPC17xx.o -> sysinit.cpp и все это скомпилировать. Нужны еще какие-то зависимости?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 7 2013, 05:40
Сообщение #238


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

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



Вроде бы больше ничего не нужно. Проверьте только, что остальные имена обработчиков прерываний совпадают с mbed-овскими. (Думаю, что он использует какие-то прерывания).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 7 2013, 12:25
Сообщение #239





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Идея с заменой системного и запускного обработчика не особо получилась там есть завизимости библиотеки и пришлось-бы переписать ее. Помогите может изменить немного и запустится может.
Цитата(_Артём_ @ Apr 7 2013, 01:52) *
disable_context_switch вызывается вроде только в функции TKernel::sched. То есть туда попадает? У вас HardFault не возникает какой-нибудь? Вы можете заменить их обработчик на свой и посмотреть адрес где возникает ошибка?

Вы оказались правы он в функций TKernel::sched и зависает а иммено в цикле
Код
do
{
     enable_context_switch();
     DUMMY_INSTR();
     disable_context_switch();
}
while(CurProcPriority != SchedProcPriority);

Я так понимаю просто не происходит прерывание PendSV_Handler которая переключит контексты, потому-что ни разу за выполнение програмы меня не кидало туда. Что мне делать помогите пожалуйста?
А обработчик где заменить? В ассемблеревском коде или TKernel::sched.
Как проверить возникновение HardFault?
Go to the top of the page
 
+Quote Post
Romcik077
сообщение Apr 7 2013, 14:19
Сообщение #240





Группа: Новичок
Сообщений: 9
Регистрация: 18-10-09
Пользователь №: 53 049



Всем спасибо за помощь!!! Проблема совсем в другом оказалась. Ну не совсем проблема... Оказывалось что програма заработала после смены SystemTimer_ISR и PendSVC_ISR на нужные, но из за функций sleep(), которому я задал слишком малый параметр и мне казалось что диоды не мигают. После смены SYSTICKINTRATE с 960 на 96 я заметил что диоды замигали и тут я понял в чем проблема. Что-ж осталось разобраться в чем измеряется параметр для sleep() и какие значения поставить для SYSTICKINTRATE и SYSTICKFREQ(теперь они 96 и 96000000). Если не трудно подскажите как правильно подобрать?
Еще раз спасибо за помощь и за такую простую и удобную ОСь.

Сообщение отредактировал Romcik077 - Apr 7 2013, 14:22
Go to the top of the page
 
+Quote Post

18 страниц V  « < 14 15 16 17 18 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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