Sospecho por tu pregunta que ya conoces la respuesta genérica :-) El trabajo que tiene que hacer tu código dentro de un bucle puede terminar de forma fiable en un segundo, pero posiblemente no en 100 ms. Al menos esa es una hipótesis inicial que vale la pena probar.
288 bits equivalen a 36 Bytes, ¿verdad? A 460800 bps deberías ser capaz de transferir 46 kB por segundo, o 4,6 kB por tu periodo de bucle más corto. Es decir, eso solo no explicaría los cuelgues. El código que se ejecuta en la placa que se cuelga puede tener otro trabajo duro que hacer, aparte de transmitir, o puede estar esperando a que el otro nodo RS485 responda, y los retrasos pueden sumar el período de 100 ms, y el software está escrito de tal manera que no es tolerante a esa situación... y realmente no importa si tienes interrupciones no manejadas o simplemente un código descuidado que se ejecuta en el "nivel de programación" básico (en primer plano). Si la placa no se cuelga inmediatamente, sino que tarda un tiempo aleatorio, quizás hay otras tareas / rutinas de servicio IRQ interfiriendo, que prolongan aleatoriamente la duración de su actividad en primer plano, o algo así. Las posibilidades son infinitas. Es difícil decir dónde está el fallo en un código que ni siquiera hemos visto.
Obviamente, el diablo está en los detalles, y usted no ha proporcionado ninguno.
Si quieres empezar a depurar a partir de los patrones de comunicación y los giros periódicos, te sugiero que consigas un osciloscopio o un analizador lógico o un PC con un puerto serie y capacidad de captura con marca de tiempo (¿ExtraPutty?) o incluso sólo un portátil con una entrada de audio HDA moderna, e intentes grabar el patrón de comunicaciones a ritmo de 1 s primero, para ver cuánto tiempo tarda realmente en completar cada ciclo. Para encontrar tu problema, necesitas medir, de alguna manera. Las sondas improvisadas no están prohibidas, siempre y cuando hagan el trabajo. Si tratas de usar una entrada de audio, ten cuidado de no dañarla con una sobretensión = presta atención a los niveles de señal y al aislamiento de la tierra cuando corresponda.
2 votos
Necesitaríamos ver los esquemas de hardware y el código de software para adivinar siquiera dónde está el problema.