Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => ARM7 Mikrodenetleyici => Konuyu başlatan: 41linea45 - 25 Ocak 2020, 10:35:15

Başlık: USART okuması geciktirilebilir mi?
Gönderen: 41linea45 - 25 Ocak 2020, 10:35:15
Merhaba

STM32F407VGT6 işlemcisinde USART üzerinden gelen veriyi aşağıdaki gibi While döngüsü içinde  okuyorum.
USART verisinin geldiği sırada işlemci başka bir iş yapıyorsa gelen USART datası okunabilir okunması bekletilebilri mi?
char com_gelen[11]=" "; HAL_UART_Receive(&huart2, (uint8_t *) &com_gelen, 11, 500);//500 ms okuma süresi
İşlemci başka bir iş ile meşgulken USART datasını MultiTask FreeRTOS kullanmadan veri kaybı yaşamadan okuma imaknı var mıdır?

İyi ÇAlışmalar.

Başlık: Ynt: USART okuması geciktirilebilir mi?
Gönderen: fide - 25 Ocak 2020, 13:50:47
DMA, nested interrupt konularına bakabilirsin.
Başlık: Ynt: USART okuması geciktirilebilir mi?
Gönderen: mufitsozen - 25 Ocak 2020, 14:07:06
Alıntı yapılan: 41linea45 - 25 Ocak 2020, 10:35:15İşlemci başka bir iş ile meşgulken USART datasını MultiTask FreeRTOS kullanmadan veri kaybı yaşamadan okuma imaknı var mıdır?

Evet vardir.

usart ISR ile program arasinda haberlesmeyi saglayacak RX ve TX queue'lar kurarsiniz ve daha sonra:

a- Bu queue'larin control structure concurrent erisim ihtimaline karsi, erisirken "critical section"  kullanirsiniz. 

ya da

b- lock-free queue implement edersiniz.
Başlık: Ynt: USART okuması geciktirilebilir mi?
Gönderen: 41linea45 - 25 Ocak 2020, 15:44:44
Alıntı yapılan: fide - 25 Ocak 2020, 13:50:47DMA, nested interrupt konularına bakabilirsin.
Merhaba Interupt işleminde İşlemcinin hali hazırda devam ettiği işi kesip / iptal edip USART okuması mı yapılır?
Interrupt lar bu şekilde çalışmaz mı? Hiç Interruptla çalışmadım. Interrupt devam eden görevin kesintiye uğramasına sebep olmaz mı?

Alıntı yapılan: mufitsozen - 25 Ocak 2020, 14:07:06Evet vardir.

usart ISR ile program arasinda haberlesmeyi saglayacak RX ve TX queue'lar kurarsiniz ve daha sonra:

a- Bu queue'larin control structure concurrent erisim ihtimaline karsi, erisirken "critical section"  kullanirsiniz. 

ya da

b- lock-free queue implement edersiniz.

Que konusunda hiç bilgim yok kararsız kaldım.
Öncelikle pratik olup tavsiye ettiğiniz hangisidir?

-Multitask FreeRTOS
-DMA Interrupt
- lock-free queue

Hangisine yönelmeliyim ?

İyi Çalışmalar.
Başlık: Ynt: USART okuması geciktirilebilir mi?
Gönderen: fide - 25 Ocak 2020, 19:26:55
Spi, uart, can bus vb dışarıdan gelen her veriyi interrupt kullanarak alırsın. Bunun yöntemi bu. Fakat burada dikkat edilecek nokta hangi verinin daha hızlı geldiği ve paketin ne kadar uzun olduğu.

Örnek: spi 4megabit hızında veri gönderiyor ve uart ise 115200. Yani uarttan 1 byte veri alana kadar  32 byte veri alır.

Arm nested interrupt sayesinde interruptlar arasında öncelik atamanı sağlar. Böylece interrupt gelince öncelikle hızlı olan porttaki veri alınır sonra yavaş olan.

Bir de buffer size var.