<div dir="ltr"><div><div><div><div><div><div><div><div>Hi,<br><br></div>It looks like i've got some pretty lowlevel problems with the rtl22xx_t BSP on my hardware, could i ask for some hints on how best to investigate. I am of course presuming this BSP is production ready, it might be rotten, does anyone know ?<br>
<br></div>I have two symptoms.<br><br></div>1) RTEMS calls like rtems_task_wake_after() cause a return from a thread, despite being wrapped in forever loops.<br><br></div>2) When using CONFIGURE_STACK_CHECKER_ENABLED having threads other than the Init() and rtems_idle() threads cause the 'IDLE' thread's stack to be reported as blown.<br>
<br></div>Now i run through boot_card() fine, task switch into the Init task, so a task switch has occurred once ok.<br><br></div>An example stack blow.<br><br>BLOWN STACK!!!<br>task control block: 0x814C9BBC<br>task ID: 0x09010001<br>
task name: 0x49444C45<br>task name string: IDLE<br>task stack area (4100 Bytes): 0x814D074C .. 0x814D1750<br><br></div>But my IDLE task is just a forever loop, so it seems unlikely.<br><br></div>See the example code following;<br>
<br>-------------------<br>#define CONFIGURE_IDLE_TASK_BODY rtems_idle<br><br>void rtems_idle (void)<br>{<br>    // power save here<br>    for (;;)<br>    {<br>    }<br>}<br><br>rtems_task test_wake_after(int arg)<br>{<br>
    for (;;)<br>    {<br>        rtems_task_wake_after(arg);<br>    }<br><br>    rtems_task_delete(RTEMS_SELF);<br>}<br><br>rtems_task Init(<br>    rtems_task_argument ignored<br>)<br>{<br>    rtems_status_code status;<br>
    rtems_id id;<br><br>    status = rtems_task_create( "wake_after",<br>        23,<br>          1024,<br>        RTEMS_DEFAULT_MODES,<br>        RTEMS_FLOATING_POINT | RTEMS_DEFAULT_ATTRIBUTES,<br>        &id<br>
    );<br><br>    status = rtems_task_start(id, test_wake_after, 100);<br><br>    rtems_task_delete(RTEMS_SELF);<br>}<br><br>#define CONFIGURE_IDLE_TASK_BODY rtems_idle<br>#define CONFIGURE_EXTRA_TASK_STACKS         (CONFIGURE_MAXIMUM_TASKS * RTEMS_MINIMUM_STACK_SIZE)<br>
<br>#define CONFIGURE_MAXIMUM_DRIVERS           6<br><br>/* NOTICE: the clock driver is explicitly disabled */<br>#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER<br>#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER<br>
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK<br><br>#define CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS<br>#define CONFIGURE_MAXIMUM_TASKS 40                // TX MAX_THREAD<br>#define CONFIGURE_MAXIMUM_TIMERS 40                // TX MAX_TIMER<br>
#define CONFIGURE_MAXIMUM_SEMAPHORES 40            // TX MAX_MUTEX<br>#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 40        // TX MAX_MSG_QUEUE<br>#define CONFIGURE_MAXIMUM_PARTITIONS 5<br>#define CONFIGURE_MAXIMUM_REGIONS 5<br>
#define CONFIGURE_MAXIMUM_PORTS 0<br>#define CONFIGURE_MAXIMUM_PERIODS 0<br>#define CONFIGURE_MAXIMUM_BARRIERS 0<br><br>#define CONFIGURE_MICROSECONDS_PER_TICK   10000 /* 10 milliseconds */<br>#define CONFIGURE_TICKS_PER_TIMESLICE       50 /* 50 milliseconds */<br>
<br>#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM<br>#define CONFIGURE_FILESYSTEM_RFS<br>#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10<br><br>#define CONFIGURE_STACK_CHECKER_ENABLED<br><br>#define CONFIGURE_RTEMS_INIT_TASKS_TABLE<br>
#define CONFIGURE_INIT<br>#include <rtems/confdefs.h><br><div><div><br><br><div><div><div><div><div><div><div><br>------------------------------<br><div><br clear="all"><div><br><div>regards</div><div>---</div><div>
Matthew J Fletcher</div><br>
</div></div></div></div></div></div></div></div></div></div></div></div>