TrampolineRTOS / trampoline

Trampoline is a static RTOS for small embedded systems. Its API is aligned with OSEK/VDX OS and AUTOSAR OS 4.2 standards.
GNU General Public License v2.0
620 stars 269 forks source link

porting TI TM4C123 #163

Open HassanMH01 opened 8 months ago

HassanMH01 commented 8 months ago

I'm porting trampoline os to tiva c target "tm4c123gh6pm", have written required files for porting and now debugging, processor goes into hard fault after this assembly line which could be found in tpl_invoque.s in line 108:

/*-------------------------------------------------------------------------
 * return from the service wrapper
 */
bx   lr

after branching from this assembly line which could be found in tpl_sc_handler.s in line 286: /*-------------------------------------------------------------------------

any information to help?

mbriday commented 8 months ago

Hi, It seems that you have broken the stack:

HassanMH01 commented 8 months ago

yes, it's in my implementation and still have this error problem starts from here in tpl_os_os_kernel.c line 123: ` IF_NO_EXTENDED_ERROR(result) {

if NUMBER_OF_CORES > 1

/*
 * Sync barrier at start of tpl_start_os_service.
 */
tpl_sync_barrier(&tpl_start_count_0, &tpl_startos_sync_lock);

application_mode[core_id] = mode;

else

application_mode = mode;

endif

tpl_init_os(mode);

tpl_enable_counters();

/*
 * Call the startup hook. According to the spec, it should be called
 * after the os is initialized and before the scheduler is running
 */
CALL_STARTUP_HOOK()

/*
 * Call the OS Application startup hooks if needed
 */
CALL_OSAPPLICATION_STARTUP_HOOKS()

if NUMBER_OF_CORES > 1

/*
 * Sync barrier just before starting the scheduling.
 */
tpl_sync_barrier(&tpl_start_count_1, &tpl_startos_sync_lock);

endif

/*
 * Call tpl_start_scheduling to elect the highest priority task
 * if such a task exists.
 */
tpl_start_scheduling(CORE_ID_OR_NOTHING(core_id));

SWITCH_CONTEXT_NOSAVE(core_id)

} PROCESS_ERROR(result)

/* unlock the kernel */ UNLOCK_KERNEL() } as result = 0x07

mbriday commented 8 months ago

It doesn't seem like a question :/

HassanMH01 commented 8 months ago

I don't know how to resolve such a bug

jlbirccyn commented 8 months ago

Hello.

If you get result == 7 (7 means E_OS_STATE) in tpl_start_os_service, it means you are calling StartOS a second time from a task. If you do not do that then it means initialized global/static variables are not initialized correctly.

E_OS_STATE is returned if the current state of the OS is not OS_INIT. Trace execution within tpl_current_os_state to see what state is returned.

HassanMH01 commented 7 months ago

Ok, I've passed this error and now I encounter a situation in tpl_os_timeobj_kernel with time object

ccstudio_gSXT5xM3VN ccstudio_t9OwbpRMLS ccstudio_9JmoURsIz8

As it's not a valid location it goes hardfault

Function parameter time_obj is passed from ccstudio_eQCL225j4d and this object has this values ccstudio_agixMYQAWh

mbriday commented 7 months ago

Hi, Have you updated the link script for your specific target? It seems that there is a problem with memory locations. regards,

HassanMH01 commented 7 months ago

Yes goil template files are updated with Flash, RAM and stack size

mbriday commented 7 months ago

It seems that time_obj does not refer to a correct memory location. Valid RAM is most of the time 0x20xxxxxx, but pointers are in 0x0100xxxx… Maybe you have to track the time objs? and that the double linked list is correct. regards