USART okuması geciktirilebilir mi?

Başlatan 41linea45, 25 Ocak 2020, 10:35:15

41linea45

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.


fide

DMA, nested interrupt konularına bakabilirsin.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mufitsozen

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.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

41linea45

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.

fide

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.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com