Hi Joel I think you are right, it is a complete reset. I don't know the reason for the system reset. My test code is as below. System will reset after about 40min. #include <stdlib.h> #include <stdio.h> #include <termios.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <rtems/error.h> #include <rtems/libio.h> #include <rtems/stackchk.h> #include <libchip/chip.h> #include <bsp.h>
#define PORT "/dev/ttyUART1" #define PIN_UART1_RXD {PIO_PA5C_URXD1, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_DEFAULT} #define PIN_UART1_TXD {PIO_PA4C_UTXD1, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_DEFAULT} #define PIN_LED_0 {PIO_PC9, PIOC, ID_PIOC, PIO_OUTPUT_1, PIO_DEFAULT} const Pin pins[] = { PIN_UART1_RXD, PIN_UART1_TXD, PIN_LED_0 }; rtems_task task_send( rtems_task_argument task_index ) { char* send_string = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" ; /* character count : 400 */ int index = 1; rtems_status_code sc = rtems_termios_bufsize( 512, 512, 512 ); if (sc > 0) { perror("rtems_termios_bufsize(): failed \n"); } int fd = open(PORT, O_RDWR); if (fd < 0) { perror("open(): failed to open /dev/ttyUART1 \n"); } while (1) { int len = write(fd, send_string, 200); if (len < 0) { perror("write(): failded to write\n"); close(fd); exit(-1); } (void) rtems_task_wake_after( rtems_clock_get_ticks_per_second() / 20 ); } } rtems_task task_led( rtems_task_argument task_index ) { while(1) { if (PIO_GetOutputDataStatus(&pins[2])) PIO_Clear(&pins[2]); else PIO_Set(&pins[2]); (void) rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); } } rtems_task Init( rtems_task_argument argument ) { rtems_id task_id[ 4 ]; rtems_name task_name[ 4 ]; task_name[ 1 ] = rtems_build_name( 'S', 'N', 'D', ' ' ); task_name[ 2 ] = rtems_build_name( 'L', 'E', 'D', ' ' ); PIO_Configure(pins, PIO_LISTSIZE(pins)); puts("This is the Init Thread.\n"); (void) rtems_task_create( task_name[ 1 ], 1, RTEMS_MINIMUM_STACK_SIZE * 4, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &task_id[ 1 ] ); (void) rtems_task_create( task_name[ 2 ], 2, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &task_id[ 2 ] ); (void) rtems_task_start( task_id[ 1 ], task_send, 1 ); (void) rtems_task_start( task_id[ 2 ], task_led, 2 ); (void) rtems_task_delete( RTEMS_SELF ); } #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MICROSECONDS_PER_TICK 10000 #define CONFIGURE_TICKS_PER_TIMESLICE 5 #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 10 #define CONFIGURE_INIT_TASK_STACK_SIZE (2 * RTEMS_MINIMUM_STACK_SIZE) #define CONFIGURE_EXTRA_TASK_STACKS (4 * RTEMS_MINIMUM_STACK_SIZE) #define CONFIGURE_MAXIMUM_TASKS 5 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT #include <rtems/confdefs.h> Thanks Daniel On Thu, Aug 27, 2020 at 7:52 PM Joel Sherrill <j...@rtems.org> wrote: > > > On Thu, Aug 27, 2020, 2:33 AM Daniel Li <ludvig....@gmail.com> wrote: > >> >> Hello world >> >> I'm using RTEMS5 as an uart2udp converter. I'm observing a task restart >> when I send bytes to uart for a long time ( for 20min @ about 200 bytes/s >> ), and there is no error reported. I don't know how to overcome, anyone >> encountered this problem? >> > > Are you sure it isn't a complete reset? That would make more sense to me > as a possibility. > >> >> Thanks >> >> Daniel >> >> _______________________________________________ >> users mailing list >> users@rtems.org >> http://lists.rtems.org/mailman/listinfo/users > >
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users