Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение
Здесь тоже пошагово создать свою RTOS:
www.edx.org/course/real-time-bluetooth-networks-shape-the-world

Согласен на 100% :)

Жаль что для x86… Для ARM было бы намного интересней ( jtag, uart)

Для тех кто хочет написать свою RTOS (там С + ASM), очень советую: www.edx.org/course/real-time-bluetooth-networks-shape-the-world-3
Немного code review:
char, unsigned char, int 
заменить на
int8_t, uint8_t, uint16_t


struct pedal {
char port;
...}

на
typedef struct {
} pedal_t;

struct pedal pedals[7][4] 

pedal_t  pedals[7][4] 


Что делает и зачем так сложно?
PORTD = 0b00000000 + (PORTD & 0b11101100);


char pos1; // позиция 1
  char pos2; // позиция 2

на
int8_t pos[2]


 unsigned char act1[16]; //программа 1
  unsigned char act2[16]; //программа 2

на
uint8_t act[2][16]


type == 255

на
#define SOME_TYPE 255

if(type == SOME_TYPE) , или лучше if (SOME_TYPE == type)


if (prg[*pos] == 254) {
      //Удерживать клавишу, следующую за *pos
      Keyboard.press(prg[++*pos]);
    } else if 

на
switch (prg[*pos] )
{
....
}

А MCU 2-ма ядрами не рассматриваете?

"Что не нравится при этом — ну нельзя никак запускать DMA от прерывания от входа GPIO, вот и приходится работать с таймерами. Может, кто-нибудь подскажет другой способ?"


На Cypress PSoC так получиться. И QSPI тоже есть, но нет ethernet (есть только MDIO (

STM32 CubeMX + Atollic True Studio: habr.com/ru/post/442162
Atollic TrueSTUDIO: atollic.com/truestudio — 100% free, работает и под Windows и Linux, ограничений нет, и работает с STM32CubeMX.

www.youtube.com/watch?v=q9Ssi9ry1eg
www.youtube.com/watch?v=6RqUkFIeN6w
www.youtube.com/watch?v=JnmjmP2Xchg

Atollic is now part of STMicroelectronics: atollic.com
Работал с Rosserial на F407, F429, F767, в Atollic True Studio:

Так как библиотеки ROS написаны на C++, переводим наш проект в проект С++, и изменяем формат файлов main.c, stm32f1xx_hal_msp.c, stm32f1xx_it.c в .cpp

Не нужно, достаточно только изменить main.c на main.cpp
В Atollic True Studio есть возможность «конвертировать C проект в С++»

забегая вперед, если проект будет на С++, отладка может не работать

неправда, работает без проблем.

Мой проект под STM32F767 с Rosserial и FreeRTOS и LL библиотекой (не люблю HAL), пока сироват и работает без UART прериваний и DMA:
github.com/ros-ukraine/leobot/tree/F%23111_STM32F767_Firmware/leobot_firmware/STM32F767_Firmware

В данный момент не существует информации об использовании робототехнической операционной системы ROS в связке с микроконтроллером STM32. Интернет переполнен только вопросами.

полно, например Adding Support for New Hardware:
wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware
wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART

Не знаю почему, но если после nh.spinOnce(); поставить задержку (даже osDelay(1)) Rosserial работать не будет.
Что мне не нравиться в Cube (прошу прощения за эмоции):
1. Если мне нужна только LL библиотека, всё равно получу смесь HAL и LL, даже если выбирал только LL.
2. Нет возможности выбрать только FreeRTOS без CMSIS RTOS API. (в CMSIS RTOS нет например streaming buffer)
3. При включении прерывания по UART, включаеться только NVIC, а для UART нужно вллючать вручную.
4. Нет возможности отказаться от Timebase Source. Если у меня RTOS и я получаю тик от SysTimer, ну нахрена мне в системе два таймера с прерыванием 1ms (от Timebase Source и SysTimer)
5. Cube генерирует Debug код с оптимизацией по размеру.

Знаю, что можно потом удалить ненужное.

Супер!
P.S.если не ограничивать себя ардуино, много интересного можно сделать :)

А загрузка на ARM будет?

У нас можно купить такой: https://stiystil.com.ua/ru/en

Даже когда отключено напряжение питания HTU21, на микросхеме будет напряжение достаточное для работы (5V — Vd), тоесть примерно 5 — 0.6 = 4.4V
image

Эффект Даннинга — Крюгера на практике :)

У вас ошибка, там 500 микроА, а не 500mA (0.5)

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

"Данный микроконтроллер не умеет делать мультизадачность. Он считает код сверху вниз, проходя по всем веткам и функциям и после завершения, он начинает заново. " все MCU так работают, мультизадачностю занимаеться софт.как напишете так и работает. Но arduino ограничила Вас рамками. Используйте interrupt для упрощения кода. Можете познакомииься с FreeRTOS — там будет мультизадачность. Arduino отлично подходить для прошивки MCU без программатора. (Arduino- нет нормальной IDE, нет Debug и другие "-")

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность