Перейти к содержанию
    

Порт Cortex-M0/M3/M4(F) IAR залит в репозитарий

Добрый день, коллеги! Тут) Пока смог протестировать только для Cortex-M0. Конкретно: stm32f051. Остальные архитектуры возможно на днях.

Пробуйте) Пишите о результатах. Если что, буду править)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил на Cortex-M3 (LPC1768). Были внесены некоторые правки, в основном синтаксические.

Проверил на Cortex-M4(F) (LPC4337, включая/выключая в опциях компилятора FPU).

Задачки были 2 шт, очень простые: мигание светодиодиками.

 

Версия IAR: 8.40.1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отлично!

Теперь бы ещё пару примерчиков вот сюда, и всем пользователям IAR+scmRTOS было бы счастье :-)

Думаю, тогда @dxp точно согласится сделать новый релиз :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, AHTOXA said:

Теперь бы ещё пару примерчиков вот сюда, и всем пользователям IAR+scmRTOS было бы счастье :-)

На следующей неделе у меня отпуск (спасибо папе:dance2:), думаю, что сделаю)

Есть плата с Cortex-M7, можно её ещё проверить, хотя технически это тот же Cortex-M4, но FPU двойной точности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/23/2020 at 7:01 AM, haker_fox said:

Пробуйте) Пишите о результатах. Если что, буду править)

Спасибо! Весьма вероятно что скоро пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, AlexG said:

Спасибо! Весьма вероятно что скоро пригодится.

Да пожалуйста))) Если всё-таки пригодится, отпишитесь о тестировании) Если не сложно, конечно:acute:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 01.05.2020 в 17:59, haker_fox сказал:

Да пожалуйста))) Если всё-таки пригодится, отпишитесь о тестировании) Если не сложно, конечно:acute:

Мне предстоит повозиться с ядром М3 и отпишу с удовольствием. Одна просьба -не могли бы вы выложить хоть один тестовый пример.

Он же наверняка у вам есть, вы же не на боевом проекте порт отлаживали.

З.Ы. И если не сложно поправьте в шапке фалов порта оставшееся  TOOLKIT: ARM GCC на ARM IAR.

Спасибо и с праздником.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, WHILE said:

Одна просьба -не могли бы вы выложить хоть один тестовый пример.

Тестовые примеры остались на работе. А сам я нахожусь дома. Я бы сделал их и тут, но у меня нет платы с CM3((( Возможно, на днях я появлюсь на работе, заберу их... Да, был большой азарт портировать ОСь, т.к. намечался проект. Но вот с примерами поступил как-то небрежно, не думал, что они так важны:acute:

1 hour ago, WHILE said:

TOOLKIT: ARM GCC на ARM IAR.

Поправлю! Но, думаю, со всеми остальными проблемами, если таковые вылезут)

1 hour ago, WHILE said:

Мне предстоит повозиться с ядром М3 и отпишу с удовольствием.

Желаю успехов!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлен пример для stm32f0discovery. Тут. Естественно его можно запустить и на другом микроконтроллере с микроархитектурой Cortex-M0 (пример для stm32f091rbt6), поправив скрипт линкера, стартап-файл, при необходимости регистры ввода-вывода и настройки среды IAR. Пример не завязан на CMSIS. Несколько регистров ввода-вывода, необходимых для примера, "вбиты" прямо в файле main.cpp. ИМХО, это несколько упрощает разбор примера, не заставляя отвлекаться на другие библиотеки. Также в примере использован "стартап" на Си++ из одного из моих рабочих проектов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Пример для stm32f334r8 (плата nucleo-f334r8) добавлен. Тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Пример для lpc1768 добавлен (плата от стартеркита). Тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ваш труд по портированию scmRTOS на IAR.

Проверил на отладке под STM-ский Cortex M0. Работает!

Но одно но - в ваших примерах у вас выключены варнинги(Project -> Options ->

C/C++ compiler -> Diagnostics у вас не стоит галка"Enable remarks". При ее включении даже на вашем

маленьком тестовом проекте появляется под 50 варнингов, что по - моему многовато.

З.Ы. Авторы оси сидят на GCC - он получается, менее строгий компилятор, чем ЯР?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Remarks - это разве Warnings? Это просто замечания, иногда по делу, но чаще на всякий случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, WHILE said:

Спасибо за ваш труд по портированию scmRTOS на IAR.

Благодарю!))

18 hours ago, WHILE said:

Но одно но - в ваших примерах у вас выключены варнинги

Предупреждения (Warnings) компилятора и ошибки (Errors) нельзя просто так взять и выключить. Предупреждения ещё можно подавить с помощью "прагмы". Но я этого не делаю никогда, наоборот в настройках компилятора добавлен ключ --warnings_are_errors, который превращает все предупреждения в ошибки, чтобы программист даже чуть-чуть не накосячил в проекте) А вот "замечания" (ремарки, remarks) я действительно не использую. Т.к. они вылетают в огромного количестве, и все устранить их трудоёмко. Да я пока и не решил, честно говоря, надо ли)

 

18 hours ago, WHILE said:

З.Ы. Авторы оси сидят на GCC - он получается, менее строгий компилятор, чем ЯР?

Насколько помню не менее строгий, а даже наоборот за счёт разных ключей может работать чуть ли ни как анализатор кода. Могу ошибаться, давненько это было)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлено расширение watchdog по мотивам данной статьи.

Есть примеры для STM32F091LPC1768 и nucleo-f334.

Расширение протестировано пока только на примерах, т.к. реальное приложение, нуждающееся в этом расширении пока просто не готово.

Расширение снабжено комментариями на "правильном" английском.

Буду рад, если кто-либо испытает неудержимое желание внедрить расширение в свой проект и подскажет, что в нём ещё можно поправить:acute:

Кратко: задачи, по желанию пользователя, добавляются методом register_process в менеджер собаки. При этом методу указывается ссылка на процесс и максимально-допустимое время таймаута процесса. Оно может быть и больше, чем реальный таймаут железного сторожевика. Процессы можно добавлять не все, а только те, которые хочется. Хотя, я не сторонник такого решения, и в своём реальном проекте я добавлю всё, включая процесс idle. Тем не менее, возможно добавлять только по желанию есть. Задача каждого процесса в течение отведённого для него таймаута, который задаётся в системных тиках таймера ОСРВ, вызвыать метод alive(). Можно это делать так часто, как захочется. Т.е. оконного режима нет (возможно, это задел на перспективу). Если необходимо уснуть надолго, например, в ожидании некого события, которое наступает раз в 1000 лет, то вызывается метод asleep(). После этого менеджер собаки перестаёт учитывать данный процесс (тот, из которого вызыван asleep()) до тех пор, пока процесс не дождётся события и не вызовет метод alive(). Тем не менее, такой вызов alive() только покажет менджеру, что процесс чего-то там должался, и отсчёт таймаута продолжился с того места, на котором остановился перед вывзовом asleep(). Из этого следует, что нужно повторно вызывать alive() уже для сброса таймаута. В расширении предусмотрена некая безопасность:

1. При вызове alive() из незарегистрированного метода будет мгновенная перезагрузка системы.

2. При неких повреждениях управляющих структур мендежера, например, значение таймаута процесса больше, чем значение инициализирующего его, тоже будет перезагрузка.

Всё общение с реальным железным псом ведётся через три хука:

    void wdg_init_user_hook();          // this hook setup needed hardware, internal watchdog, for example
    void wdg_force_reboot_user_hook( const TPriority  pr );  // this hook forces to reboot the system immideately
    void wdg_feed_user_hook();          // this hook feeds the watchdog

Первый хук настраивает собаку, или пины, управляющие ей. Это, если собака внешняя (самая лучшая, кстати).

Второй хук позволяет сбросить систему немедленно любым способом: через собаку или через NVIC. Это по желанию пользователя. Одновременно, в качестве аргумента мы получаем приоритет процесса, который не успел вовремя сбросить свой виртуальный сторожевик. Т.к. в scmRTOS все приоритеты уникальные, т.е. нет возможности задать два процесса с одинаковыми приоритетами, то этот аргумент позволит однозначно выявить виновника торжества)

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

Уф, вроде бы всё написал. Если будут вопросы, буду рад этому, т.к. расширение для меня сложноватое, раньше так сам не делал с собакой. Но его большой плюс в том, что оно позволяет контролировать каждую! задачу.

З.Ы. Забыл. Для того, чтобы менджер собаки работал, в хуке системного таймера нужно вызывать метод run() самого менджера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...