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

 
 
17 страниц V  « < 11 12 13 14 15 > »   
Reply to this topicStart new topic
> Выпущена scmRTOS 4.0., Ура, товарищи! :)
_Артём_
сообщение Apr 26 2012, 21:04
Сообщение #181


Гуру
******

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



Открыл проект 1-EventFlag для AVR\IAR. Заменил M168 на M128:
Цитата
Error[Pe020]: identifier "SPMCR" is undefined P:\IAR_PROJECT\scm400\MEGA\1-EventFlag\Src\scmRTOS_TARGET_CFG.h 100
Error[Pe020]: identifier "SPMCR" is undefined P:\IAR_PROJECT\scm400\MEGA\1-EventFlag\Src\scmRTOS_TARGET_CFG.h 101
Error[Pe020]: identifier "SPMCR" is undefined P:\IAR_PROJECT\scm400\MEGA\1-EventFlag\Src\scmRTOS_TARGET_CFG.h 106
Error[Pe020]: identifier "SPMCR" is undefined P:\IAR_PROJECT\scm400\MEGA\1-EventFlag\Src\scmRTOS_TARGET_CFG.h 110

Это так и раньше было?
Или что-то забыли добавить?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 27 2012, 03:02
Сообщение #182


Adept
******

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



QUOTE (Nixon @ Apr 25 2012, 01:51) *
Еще небольшое замечание по ходу.
Пользовательская функция system_timer_user_hook() в scmRTOS вызывается после перепланировщика.

Ну, не после планировщика - планировщик всегда вызывается при выходе из прерывания, т.е. последним. Возможно, вы имели в виду, после функции Kernel.system_timer()?

QUOTE (Nixon @ Apr 25 2012, 01:51) *
Может лучше ее вынести в начало обработчика системного таймера?
В различных системах, где требуется манипуляция системами тактирования и режимами энергопотребления это идеологически правильно производить именно system_timer_user_hook(), но делать это лучше до вызова перепланировщика RTOS.

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

QUOTE (_Артём_ @ Apr 27 2012, 04:04) *
Открыл проект 1-EventFlag для AVR\IAR. Заменил M168 на M128:

Это так и раньше было?
Или что-то забыли добавить?

Так было всегда. Проблема тут в том, что описания регистров у AVR для разных МК нередко отличаются. Поэтому код, связанный с ними, и вынесен на уровень проекта, чтобы не привязывать исходники ОС к конкретным МК. Если меняется МК, то в этом конфигурационном заголовке надо и имена соответствующим образом поменять. А пример - он на то и пример, чтобы показать, как делается. Пользователь может вообще всё сделать по-своему - например, выбрать в качестве источника прерывания переключения контекстов какой-нибудь другой аппаратный модуль вместо используемого в примере. Просто SPM показался наиболее подходящим для этой цели.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 27 2012, 10:18
Сообщение #183


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

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



Цитата(_Артём_ @ Apr 27 2012, 00:04) *
Открыл проект 1-EventFlag для AVR\IAR. Заменил M168 на M128:
Это так и раньше было?
Или что-то забыли добавить?

Код
51     //---------------------------------------------------------------------------
52     // Sample target
53     // The sample is intended for following AVR microcontrollers:
54     // atmega48..atmega328
55     // atmega640..atmega2561
56     // Some changes in register names may be needed for other AVRs.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 27 2012, 13:00
Сообщение #184


Гуру
******

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



Цитата(ReAl @ Apr 27 2012, 13:18) *
Код
51     //---------------------------------------------------------------------------
52     // Sample target
53     // The sample is intended for following AVR microcontrollers:
54     // atmega48..atmega328
55     // atmega640..atmega2561
56     // Some changes in register names may be needed for other AVRs.


Ясно, не заметил. Раньше М128 без проблем запускалась.
Ну да ладно, у Атмела местами такой бардак с именами, что на все случаи трудно сделать.

Цитата(dxp @ Apr 27 2012, 06:02) *
Не очень понимаю проблему. Хук этот предназначен для выполнения пользовательского кода внутри обработчика системного таймера, и код этот как-то не предполагается, что тесно связан с потрохами ОС. Не могли бы вы пояснить на примере?

Если я правильно понял, то проблема в том, что непонятно как строить системы, использующие различные режимы энергосбережения:
в Idle_hook происходит засыпание МК в глубокий sleep с выключением кварца и прочей периферии. Просыпаться МК может например по прерыванию системного таймера, но все источники тактирования заглушены и их надо запустить и дождаться их готовности. Так вот как это правильней сделать?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 27 2012, 13:32
Сообщение #185


Adept
******

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



QUOTE (_Артём_ @ Apr 27 2012, 20:00) *
Если я правильно понял, то проблема в том, что непонятно как строить системы, использующие различные режимы энергосбережения:
в Idle_hook происходит засыпание МК в глубокий sleep с выключением кварца и прочей периферии. Просыпаться МК может например по прерыванию системного таймера, но все источники тактирования заглушены и их надо запустить и дождаться их готовности. Так вот как это правильней сделать?

Это, как я понимаю, зависит от конкретного МК. Только не ясно, как это связано с хуком системного таймера и его положением внутри обработчика прерывания.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 27 2012, 13:47
Сообщение #186


Гуру
******

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



Цитата(dxp @ Apr 27 2012, 16:32) *
Это, как я понимаю, зависит от конкретного МК.

Такие вещи у всех МК специфичны.

Цитата(dxp @ Apr 27 2012, 16:32) *
Только не ясно, как это связано с хуком системного таймера и его положением внутри обработчика прерывания.

Системный таймер (работающий от часового кварца например) может быть источником пробуждения.
А system_timer_user_hook можно бы использовать как функцию где включается периферия и кварц после сна. И чем раньше system_timer_user_hook будет вызван, тем лучше, так как после пробуждения МК работает от медленного RC.
Сейчас сделано так:
Код
OS_INTERRUPT void OS::SystemTimer_ISR()
{
    scmRTOS_ISRW_TYPE ISR;

    Kernel.system_timer();

#if scmRTOS_SYSTIMER_NEST_INTS_ENABLE == 0
    DISABLE_NESTED_INTERRUPTS();
#endif

#if scmRTOS_SYSTIMER_HOOK_ENABLE == 1
    system_timer_user_hook();
#endif
}

А может лучше так? Пока выполняется Kernel.system_timer() происходит в фоне стабилизация кварца.
Код
OS_INTERRUPT void OS::SystemTimer_ISR()
{
    scmRTOS_ISRW_TYPE ISR;
#if scmRTOS_SYSTIMER_HOOK_ENABLE == 1
    system_timer_user_hook();
#endif

    Kernel.system_timer();

#if scmRTOS_SYSTIMER_NEST_INTS_ENABLE == 0
    DISABLE_NESTED_INTERRUPTS();
#endif
}
Go to the top of the page
 
+Quote Post
Nixon
сообщение Apr 27 2012, 13:48
Сообщение #187


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Это не столько связано с включением/отключением кварца, сколько с переключением источника тактирования. Например я при idle переключаю основной CLK с 48MHz на 32kHz/1kHz (не могу я уснуть полностью - кое что делать приходится), по таймеру получаю управление в функцию хука, которая производит обратное действие, но перепланировка rtos при этом выполняется раньше, еще при работе от низкочастотного источника синхронизации. Получаем лишние задержки.

_Артём_ все правильно написал.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 27 2012, 16:08
Сообщение #188


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Вопрос скорее по порту GCC ARM, навеян этим. Из каких соображений не используется структура .init секций? Насколько мне известно, в коммерческой (и триальной (была у меня)) сборках от CodeSourcery секции есть.
Это связано с необходимостью писать соответствующий сложный startup?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 27 2012, 16:57
Сообщение #189


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

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



Всё очень просто - когда писался порт, этого механизма не было.
Тем более, стартап и линкерный скрипт всё равно свои, так что как сделали сначала, так и осталось. Только линкерный скрипт подправили при переходе на .init_array.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 27 2012, 18:13
Сообщение #190


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(AHTOXA @ Apr 27 2012, 20:57) *
Всё очень просто - когда писался порт, этого механизма не было.

?? Не знаю как на ARM, а на AVR .init было реализовано в 2008 (тут упомянуто).
Порт для Cortex создавался же существенно позже. Эта поддержка была наверняка реализована в компиляторе.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 27 2012, 18:36
Сообщение #191


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

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



Цитата(mdmitry @ Apr 28 2012, 00:13) *
?? Не знаю как на ARM, а на AVR .init было реализовано в 2008 (тут упомянуто).
Порт для Cortex создавался же существенно позже. Эта поддержка была наверняка реализована в компиляторе.

Так вы "не знаете", или всё же утверждаете "наверняка"? sm.gif

Порт для кортексов выпущен в 2009 году. В это время компилятор GCC только-только узнал о кортексах. Тот же самый Sourcery G++ Lite 2009q1-161 из своего дефолтного стартапа банально не вызывал конструкторы глобальных объектов, и не линковал их. Поэтому были написаны свой скрипт и стартап.
И в чём, по-вашему, заключается "эта поддержка в компиляторе" при условии написания своего стартапа и линкерного скрипта?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 27 2012, 18:42
Сообщение #192


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

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



Цитата(mdmitry @ Apr 27 2012, 21:13) *
?? Не знаю как на ARM, а на AVR .init было реализовано в 2008 (тут упомянуто).
Порт для Cortex создавался же существенно позже. Эта поддержка была наверняка реализована в компиляторе.
В компиляторе+линкере реализована поддержка секций вообще.
Для AVR это часть avr-libc. В идущих в ней линкерных скриптах секции указаны в нужном порядке, в gcrt1.S используются некоторые из секций для нужд стартапа, остальные отданы пользователю.
С компилятором тут связано разве что то, что он помещает конструкторы в выделенную для них секцию именно из этой группы.




--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 27 2012, 19:13
Сообщение #193


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(AHTOXA @ Apr 27 2012, 22:36) *
Порт для кортексов выпущен в 2009 году. В это время компилятор GCC только-только узнал о кортексах. Тот же самый Sourcery G++ Lite 2009q1-161 из своего дефолтного стартапа банально не вызывал конструкторы глобальных объектов, и не линковал их. Поэтому были написаны свой скрипт и стартап.

Глянул на lite и trial: в lite нет многих файлов инициализации, которые есть в trial.
Следовательно:
Цитата
Так вы "не знаете", или всё же утверждаете "наверняка"? sm.gif

В trial есть, в lite нет.
Цитата
И в чём, по-вашему, заключается "эта поддержка в компиляторе" при условии написания своего стартапа и линкерного скрипта?

При этом условии ни в чем.
Понятно, что писать свой аналог тяжело, и следовательно, не необходимо.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 27 2012, 19:36
Сообщение #194


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

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



Цитата(ReAl @ Apr 28 2012, 00:42) *
С компилятором тут связано разве что то, что он помещает конструкторы в выделенную для них секцию именно из этой группы.

Именно! Но не для arm-gcc. Раньше (во время выпуска первых версий порта для кортексов) конструкторы помещались в секцию .ctors, а сейчас они переехали в .init_array. Получается, что arm-gcc вообще никак не поддерживал эти .init, а использовал и использует другие механизмы sm.gif
Кстати, вот здесь klen очень подробно расписал, как должен работать механизм с .init_array. И ещё вот здесь обсуждали это.


Цитата(mdmitry @ Apr 28 2012, 01:13) *
В trial есть, в lite нет.

Извините, но не верю. Линкерные-то скрипты - они все есть и в lite. И там нет поддержки .initX секций.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 27 2012, 19:41
Сообщение #195


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(AHTOXA @ Apr 27 2012, 23:36) *
Извините, но не верю. Линкерные-то скрипты - они все есть и в lite. И там нет поддержки .initX секций.

Зарегистрируйтесь здесь, скачайте, установите и сравните.
Там несколько файлов с копирайтом CodeSourcery, включая бинарные. В составе поставки расширенные библиотеки и другие отличия.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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