Size: a a a

2020 December 22

ED

Electronics Designer in Embedded Group
Проверил по даташиту.
источник

W

Wild_Wind in Embedded Group
Eugene Anfimov
Вопрос тогда ребром, а зачем Генту?)
Привык. Уже и не помню зачем изначально ставил.
источник

BV

Bulat Valeev in Embedded Group
Wild_Wind
Ну мне оно не надо было.
Ок, спс
источник

AZ

Aleksander Zholtkovs... in Embedded Group
Eugene Anfimov
Вопрос тогда ребром, а зачем Генту?)
гента была хороша. Один раз установил и бесконечный апгрейд без необходимости переустановки :)
источник

AZ

Aleksander Zholtkovs... in Embedded Group
Alexander Chernigin
Код общения с SPI такой

uint8_t SPI_LL_RW(uint8_t data) {
 while (!LL_SPI_IsActiveFlag_TXE(spi_handdler)) {
   asm("NOP");
 }

 LL_SPI_TransmitData8(spi_handdler, data);

 while (!LL_SPI_IsActiveFlag_RXNE(spi_handdler)) {
   asm("NOP");
 }
 return LL_SPI_ReceiveData8(spi_handdler);
}
Что тут улучшить?
попробовать поменять ...Flag_TXE на ..Flag_RXNE
источник

EA

Eugene Anfimov in Embedded Group
Aleksander Zholtkovskii
гента была хороша. Один раз установил и бесконечный апгрейд без необходимости переустановки :)
Мы уже обсуждали =) Я тоже бывший гентушник...но сейчас важна скорость, а не новизна.
источник

AZ

Aleksander Zholtkovs... in Embedded Group
Eugene Anfimov
Мы уже обсуждали =) Я тоже бывший гентушник...но сейчас важна скорость, а не новизна.
скорость переустановки? :)
источник

BV

Bulat Valeev in Embedded Group
Eugene Anfimov
Мы уже обсуждали =) Я тоже бывший гентушник...но сейчас важна скорость, а не новизна.
Ну вот йокта огонь
источник

EA

Eugene Anfimov in Embedded Group
Музычка прикольная НТР "Нужно было ставить , что?" Линукс!
источник

EA

Eugene Anfimov in Embedded Group
Bulat Valeev
Ну вот йокта огонь
Согласен на все 100! Главное чтобы тоже не пересобирать по 100 раз на дню!
источник

EA

Eugene Anfimov in Embedded Group
RTOS one love!
источник

VK

Valentin Kornienko in Embedded Group
Alexander Chernigin
Код общения с SPI такой

uint8_t SPI_LL_RW(uint8_t data) {
 while (!LL_SPI_IsActiveFlag_TXE(spi_handdler)) {
   asm("NOP");
 }

 LL_SPI_TransmitData8(spi_handdler, data);

 while (!LL_SPI_IsActiveFlag_RXNE(spi_handdler)) {
   asm("NOP");
 }
 return LL_SPI_ReceiveData8(spi_handdler);
}
Что тут улучшить?
Вместо asm("NOP"); сделать taskYield();
источник

VK

Valentin Kornienko in Embedded Group
Потому что дайте другим задачам поработать, пока идет I/O операция
источник

y

y in Embedded Group
Туплю, не могу понять в чем проблема. Контекст: продолжаю делать DFU bootloader на stm32f10rct6, на котором его в стоке нет. Вроде бы сделал. Есть отдельный проект на бутлоадер, который радостно грузит фирмварь, заливаемую через DFU  c 0x08008000. Есть тупой блинк-проект для проверки того, что бутлоадер нормально отрабатывает - тоже работает. Заливается, радостно мигает светодиодом. Пробую усложнить блинк - впиливаю FreeRTOS. Работает, заливается, грузится бутлоадером, мигает. Постепенно усложняю, приводя плюс-минус к тому же виду, что и основной проект. Врубаю два SPI, I2C, I2S, UART. Работает - заливается, мигает. Добавляю USB CDC - все, привет, перестает. Инициализирую через кубик. Причем, MX_USB_DEVICE_Init() стоит после инициализации всей периферии в коде. Но при этом - если я его комментирую, вся периферия инициализируется нормально, scheduler запускается, таска с миганием светиком отрабатывает. Если я его раскомментирую - все виснет еще до того, как запуститься scheduler, то на инициализации SPI, то на UART, какой-то чистый рандом. Ну и стандартная добавка - "вектора перекинуты", простая прошивка, как уже и говорил и льется, и работает. ЧЯДНТ? Инициализация USB DFU в буте стоит после загрузки кода прошивки и если она не грузанулась. То есть когда прошивка грузится - USB в буте не инициализируется, по идее конфликта нет.
источник

A

Alexander in Embedded Group
Valentin Kornienko
Вместо asm("NOP"); сделать taskYield();
Не в этом случае.
Там по сути нужно подождать пока транзакция по SPI закончится.
Двойного переключение контекста больше времени отожрет.
источник

VK

Valentin Kornienko in Embedded Group
Alexander
Не в этом случае.
Там по сути нужно подождать пока транзакция по SPI закончится.
Двойного переключение контекста больше времени отожрет.
По-хорошему надо брать DMA и восстаналивать контекст
источник

VK

Valentin Kornienko in Embedded Group
Т.е. fire-and-forget. Запустили транзакцию-отпустили задачу. пО окончанию работы DMA в перывании сделали taskNotifyEvent, как-то так назывался метод.
источник

LZ

Leonid Zaliubovskii in Embedded Group
y
Туплю, не могу понять в чем проблема. Контекст: продолжаю делать DFU bootloader на stm32f10rct6, на котором его в стоке нет. Вроде бы сделал. Есть отдельный проект на бутлоадер, который радостно грузит фирмварь, заливаемую через DFU  c 0x08008000. Есть тупой блинк-проект для проверки того, что бутлоадер нормально отрабатывает - тоже работает. Заливается, радостно мигает светодиодом. Пробую усложнить блинк - впиливаю FreeRTOS. Работает, заливается, грузится бутлоадером, мигает. Постепенно усложняю, приводя плюс-минус к тому же виду, что и основной проект. Врубаю два SPI, I2C, I2S, UART. Работает - заливается, мигает. Добавляю USB CDC - все, привет, перестает. Инициализирую через кубик. Причем, MX_USB_DEVICE_Init() стоит после инициализации всей периферии в коде. Но при этом - если я его комментирую, вся периферия инициализируется нормально, scheduler запускается, таска с миганием светиком отрабатывает. Если я его раскомментирую - все виснет еще до того, как запуститься scheduler, то на инициализации SPI, то на UART, какой-то чистый рандом. Ну и стандартная добавка - "вектора перекинуты", простая прошивка, как уже и говорил и льется, и работает. ЧЯДНТ? Инициализация USB DFU в буте стоит после загрузки кода прошивки и если она не грузанулась. То есть когда прошивка грузится - USB в буте не инициализируется, по идее конфликта нет.
Хорошей практикой считается перед передачей управления в основной код - вернуть все в исходное состояние. Не увидел здесь о том что делаешь деинит
источник

A

Alexander in Embedded Group
Valentin Kornienko
Т.е. fire-and-forget. Запустили транзакцию-отпустили задачу. пО окончанию работы DMA в перывании сделали taskNotifyEvent, как-то так назывался метод.
Да.
Но в этом случае не похоже что используется DMA.
источник

VK

Valentin Kornienko in Embedded Group
В принципе, любая шина данных при передаче это RAII ресурс, а блокирующие ожидания могут быть болезненные
источник