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

Контроллер потока внутри IRQ

13 hours ago, jeka said:

Когда rtos ставить не хочется

А теперь подитоживающий вопрос: а чего так не хочется? Можно же взять совсем крохотную "ртоску". Она гарантированно будет работать на любом микроконтроллере с минимумом 1 кБ ОЗУ, если не меньше. Зато сразу заложен задел на будущее: захотелось добавить задачку, не проблема.

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


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

16 часов назад, jeka сказал:

Когда rtos ставить не хочется,

 

16 часов назад, jeka сказал:

Но тут вырисовывается проблемка в совместимости с RTOS:

Один я нахожу это странным? Может как-то определиться?

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


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

5 часов назад, haker_fox сказал:

Можно же взять совсем крохотную "ртоску".

Пользуясь случаем, не подскажете маленькую РТОСку, с поддержкой контроллера прерываний АРМ7(9)? Это тот, что не NVIC.

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


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

11 minutes ago, mantech said:

Пользуясь случаем, не подскажете маленькую РТОСку, с поддержкой контроллера прерываний АРМ7(9)?

Я использовал scmRTOS на ARM7 (LPC2478) лет 8 назад. Есть порт под компилятор GCC. В текущем году я делал порт под IAR, но для Cortex'ов, т.к. ARM7 давно не использую.

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


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

7 минут назад, mantech сказал:

с поддержкой контроллера прерываний АРМ7(9)?

Он там свой у каждого производителя. ATsam, LPC2xx, ADuC7xxx есть в scmRTOS, не вижу особых проблем написать под любой другой.

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


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

04.11.2020 в 13:50, jeka сказал:

 


exec_task:
    push {r0-r11,lr}
    mov32 r1,#core_task_sp
    str sp,[r1]

    ldr sp, [r0]   ; sp=inline task stack
    pop {r0-r11,lr}
    bx lr

task_yield:
    push {r0-r11,lr} ; save inline task state
    mov r12,sp

    mov32 r0,#core_task_sp
    ldr sp,[r0]   ; sp=core stack

    pop {r0-r11,lr}
    str r12,[r0]
    bx lr      

 

Вроде пишете про оптимизацию, экономию ОЗУ и про облегчение жизни CPU, но код написан очень неоптимально, с кучей ненужный действий.

Зачем отдельная BX LR если можно POP {R0-R11, PC} ?

Зачем в exe_task() и в task_yield() сохранять и затем восстанавливать регистры R0-R3,R12 ? Почитайте про соглашения вызова вашего компилятора.

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


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

On 11/5/2020 at 6:34 PM, jcxz said:

Вроде пишете про оптимизацию, экономию ОЗУ и про облегчение жизни CPU, но код написан очень неоптимально, с кучей ненужный действий.

Спасибо за замечание, учту. Я не настолько глубоко копался в этом чтоб все идеально сделать.

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


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

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

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

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

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

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

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

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

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

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