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

 
 
> Универсальный порт для Cortex-Mx (GCC) залит в репозиторий.
AHTOXA
сообщение Mar 31 2015, 19:03
Сообщение #1


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

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



Всем привет.

Добрался до Cortex-M0+ (STM32L0xx). Подумал, что отличий от порта для Cortex-M4(F) немного, и поэтому взял порт Cortex-M0 от Сергея Борща и влил его в M4(F).
А так как порт Cortex-M4(F) уже поддерживал Cortex-M3, то порт получился универсальный.
Назвал порт CortexMx, чтоб не трогать имеющиеся. Поддерживаются Cortex-M3, Cortex-M4(F), Cortex-M0, Cortex-M0+, Cortex-M1.
Добавил также пример для STM32L0xx (плата STM32 NUCLEO-L053R8).

Планирую после тестирования перевести на этот порт все примеры для M3/M4.

Замечания и предложения приветствуютсяsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 18 2015, 07:26
Сообщение #2


Гуру
******

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



То есть в порт добавляется еще куча объявлений уровня проекта. Зачем вообще пихать это все в ОСь? Достаточно попросить пользователя настроить эти два прерывания и системный таймер где, когда и как ему будет удобно.

Я вообще делаю все настройки периферии в стартапе и мне совершенно не нужны эти определения. Более того, меня напрягает необходимость сейчас передавать в потроха ОСи значение тактовой частоты.


--------------------
На любой вопрос даю любой ответ
"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
AHTOXA
сообщение Apr 18 2015, 10:08
Сообщение #3


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

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



Какая куча? Добавляется всего одно объявление, причём как раз на уровне проекта. А в порте - fallback для старых проектов, в которых нет этого объявления. Как здесь можно сделать иначе?
Что касаемо вообще настройки таймера в порте, а не в проекте - так уж исторически сложилось. В ядре есть специальный таймер для оси, поэтому удобно иметь настройку этого таймера на уровне порта. Вот например, сейчас - выяснилось, что полезно иметь приоритет системного таймера чуть повыше, чем приоритет прерывания планировщика. Я исправлю порт, и все проекты, использующие этот порт, автоматически получат это исправление. Разве это не хорошо?
Возможность выбрать другой таймер - есть. Возможность заменить функцию инициализации таймера на свою - тоже есть.
Естественно, такого рода вариативность требует некоторых телодвижений, типа задания значение тактовой частоты. Я думаю, что это небольшая плата за гибкость.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 20 2015, 05:57
Сообщение #4


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

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



Сделал, залил в репозиторий. rev. 587.

Для того, чтобы получить приоритет прерывания системного таймера чуть выше, чем приоритет прерывания планировщика, необходимо в scmRTOS_TARGET_CFG.h объявить макрос
Код
#define CORE_PRIORITY_BITS  2

Если этот макрос не объявлен, то считается, что приоритет имеет 8 значащих бит. Так как на всех знакомых мне камнях приоритет имеет менее 8 бит, то в этом случае всё будет работать как раньше, приоритет прерывания системного таймера будет самым низким.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 23 2015, 06:23
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(AHTOXA @ Apr 20 2015, 08:57) *
Для того, чтобы получить приоритет прерывания системного таймера чуть выше, чем приоритет прерывания планировщика, необходимо в scmRTOS_TARGET_CFG.h объявить макрос
Код
#define CORE_PRIORITY_BITS  2

Если этот макрос не объявлен, то считается, что приоритет имеет 8 значащих бит. Так как на всех знакомых мне камнях приоритет имеет менее 8 бит, то в этом случае всё будет работать как раньше, приоритет прерывания системного таймера будет самым низким.


Ещё б документировать его не только на форуме...

И вообще, мне кажется, стоит добавить табличку с комментариями в target_cfg.h:
CORE_PRIORITY_BITS = 4 для STM32F1xx, F2xx, (F3xx ?), F4xx, LPC17xx, LPC18xx
CORE_PRIORITY_BITS = 3 для LPC13xx, LM3S
CORE_PRIORITY_BITS = 2 для STM32L0xx, LPC11xx

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


И да, принудительно привести тип будет аккуратнее:
enum { SYS_TIMER_PRIORITY = (uint8_t)(0xFEUL << (8-(CORE_PRIORITY_BITS))) };


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 23 2015, 10:00
Сообщение #6


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

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



Цитата(esaulenka @ Apr 23 2015, 11:23) *
Ещё б документировать его не только на форуме...

Я ещё в список рассылки отписался.
Надо будет ещё добавить про новый порт новость на сайт. И обновить документацию... Но это уж к следующему релизу, наверное sm.gif

Цитата(esaulenka @ Apr 23 2015, 11:23) *
И вообще, мне кажется, стоит добавить табличку с комментариями в target_cfg.h:

Дело в том, что scmRTOS_TARGET_CFG.h - это файл уровня проекта, то есть, он изначально не рассчитан для применения на разных контроллерах.
Хотя, можно и добавить, не помешает.
Цитата(esaulenka @ Apr 23 2015, 11:23) *
И да, принудительно привести тип будет аккуратнее:
enum { SYS_TIMER_PRIORITY = (uint8_t)(0xFEUL << (8-(CORE_PRIORITY_BITS))) };

Да, верное замечание, спасибо. Только я лучше маску добавлю, потому что доступ к словам оптимальнее:
enum { SYS_TIMER_PRIORITY = ((0xFEUL << (8-(CORE_PRIORITY_BITS))) & 0xFF) };


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AHTOXA   Универсальный порт для Cortex-Mx (GCC) залит в репозиторий.   Mar 31 2015, 19:03
- - IgorKossak   Цитата(AHTOXA @ Mar 31 2015, 22:03) Замеч...   Apr 3 2015, 08:45
|- - AHTOXA   Цитата(IgorKossak @ Apr 3 2015, 13:45) st...   Apr 3 2015, 09:24
|- - AHTOXA   Обнаружил баг. Оказывается, Cortex-M0 не позволяет...   Apr 11 2015, 09:24
- - IgorKossak   В более ранних версиях приоритеты обработчиков пре...   Apr 16 2015, 17:41
|- - AHTOXA   Нет, какой-то особой причины нет. Просто я сделал ...   Apr 16 2015, 18:01
- - IgorKossak   Я имел в виду другое. Возможно в более ранней верс...   Apr 16 2015, 18:09
- - Сергей Борщ   Да простая там идея - чтобы перепланировка выполня...   Apr 16 2015, 18:43
|- - AHTOXA   Ага, то есть, если за время обработки какого-нибуд...   Apr 16 2015, 18:58
|- - Сергей Борщ   Цитата(AHTOXA @ Apr 16 2015, 20:58) А есл...   Apr 17 2015, 05:19
|- - AHTOXA   Тогда надо приподнять. Сделаю на днях.   Apr 17 2015, 05:37
|- - IgorKossak   Цитата(AHTOXA @ Apr 17 2015, 08:37) Тогда...   Apr 17 2015, 19:14
|- - AHTOXA   Нас не волнует группировка приоритетов, нам же не ...   Apr 18 2015, 05:51
- - arhiv6   Разбирался с переключением контекста, появился воп...   Sep 29 2016, 18:55
|- - AHTOXA   Второй вариант короче, быстрее, но не может прыгат...   Sep 29 2016, 21:59
- - Aaron   а что мешает в таком случае объявление функции os_...   Oct 12 2016, 05:54
|- - AHTOXA   В общем, довольно долго у меня там был как раз бли...   Oct 12 2016, 07:13
- - alex6441161   Цитата(AHTOXA @ Mar 31 2015, 23:03) Всем ...   Dec 20 2016, 06:26
|- - dxp   QUOTE (alex6441161 @ Dec 20 2016, 13:26) ...   Dec 20 2016, 07:09
- - darkling07   Подскажите, на что обратить внимание при переходе ...   Apr 12 2017, 09:10
|- - AHTOXA   Проверьте имена обработчиков прерываний SysTick и ...   Apr 12 2017, 11:03
- - darkling07   Да, точно они. Спасибо! Было PendSVC_ISR и Sys...   Apr 12 2017, 16:22
|- - AHTOXA   Это чтобы соответствовать нынешним именам в CMSIS....   Apr 12 2017, 19:58
- - esaulenka   Балуюсь свежим gcc с link time optimization. В дву...   Apr 24 2017, 07:30
|- - AHTOXA   С LTO у меня не получилось собрать ни разу с тех п...   Apr 24 2017, 09:53
- - esaulenka   Тем не менее, боевой проект собрался компилятором ...   Apr 24 2017, 10:38
|- - AHTOXA   Да, сейчас попробовал, смог собрать с LTO. Добавил...   Apr 24 2017, 11:37
- - esaulenka   Можно просто в scmRTOS_TARGET.h добавить Кодexter...   Apr 24 2017, 12:11
|- - AHTOXA   Да, так компилируется, но выдаёт warning про ...   Apr 24 2017, 12:24
|- - AHTOXA   Для проверки вынес PendSV_Handler() в ассемблерный...   Apr 25 2017, 22:02
|- - AHTOXA   Цитата(AHTOXA @ Apr 26 2017, 03:02) Ещё ч...   Aug 1 2017, 08:01
- - WHALE   Поправьте, пожалуйста, название файла описания пор...   Jan 19 2018, 06:09
|- - AHTOXA   Так этот документ только про M3. Это тогда надо и ...   Jan 19 2018, 14:43
|- - AHTOXA   Доработал документ, выложил: scmRTOS.ru.CortexMx.G...   Feb 3 2018, 08:24
- - Rst7   Moderator: Про перенос векторов теперь тут - https...   Mar 23 2018, 07:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 21:03
Рейтинг@Mail.ru


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