Ignore:
Timestamp:
Jan 21, 2014, 7:20:06 PM (11 years ago)
Author:
cfuguet
Message:
  • Adding volatile attribute for pointers used to address memory mapped hardware registers.
  • Removing the activation of interruptions before the execution of the ctx_switch function on the ioc_access function. This is to avoid been interrupted during the modification of task context variables.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_kernel/ctx_handler.c

    r271 r275  
    108108    if (curr_task_id != next_task_id)
    109109    {
     110#if GIET_DEBUG_SWITCH
     111_tty_get_lock( 0 );
     112_puts("\n[GIET DEBUG] Context switch for processor ");
     113_putd(_get_procid());
     114_puts(" at cycle ");
     115_putd(_get_proctime());
     116_puts("\n");
     117_puts(" - tasks        = ");
     118_putd(tasks);
     119_puts("\n");
     120_puts(" - curr_task_id = ");
     121_putd( curr_task_id );
     122_puts("\n");
     123_puts(" - next_task_id = ");
     124_putd(next_task_id);
     125_puts("\n");
     126_tty_release_lock(  0 );
     127#endif
     128
    110129        unsigned int* curr_ctx_vaddr = &(psched->context[curr_task_id][0]);
    111130        unsigned int* next_ctx_vaddr = &(psched->context[next_task_id][0]);
     
    113132        unsigned int local_id = procid % NB_PROCS_MAX;
    114133        unsigned int cluster_id = procid / NB_PROCS_MAX;
    115 
    116         // set current task index
    117         psched->current = next_task_id;
    118134
    119135        // reset timer counter
     
    124140#endif
    125141
     142        // set current task index
     143        psched->current = next_task_id;
     144
    126145        // makes context switch
    127146        _task_switch(curr_ctx_vaddr, next_ctx_vaddr);
    128 
    129 #if GIET_DEBUG_SWITCH
    130 _tty_get_lock( 0 );
    131 _puts("\n[GIET DEBUG] Context switch for processor ");
    132 _putd(_get_procid());
    133 _puts(" at cycle ");
    134 _putd(_get_proctime());
    135 _puts("\n");
    136 _puts(" - tasks        = ");
    137 _putd(tasks);
    138 _puts("\n");
    139 _puts(" - curr_task_id = ");
    140 _putd( curr_task_id );
    141 _puts("\n");
    142 _puts(" - next_task_id = ");
    143 _putd(next_task_id);
    144 _puts("\n");
    145 _tty_release_lock(  0 );
    146 #endif
    147 
    148147    }
    149148} //end _ctx_switch()
     
    157156    while(1)
    158157    {
     158#if GIET_IDLE_TASK_VERBOSITY == 1
     159        _tty_get_lock( 0 );
     160        _puts("\n[GIET WARNING] Processor ");
     161        _putd(_get_procid());
     162        _puts(" idle at cycle ");
     163        _putd(_get_proctime());
     164        _puts("\n");
     165        _tty_release_lock( 0 );
     166#endif
     167
    159168        asm volatile(
    160169                "move   $3,   %0              \n"
     
    167176                : "$3" );
    168177
    169 #if GIET_IDLE_TASK_VERBOSITY == 1
    170         _tty_get_lock( 0 );
    171         _puts("\n[GIET WARNING] Processor ");
    172         _putd(_get_procid());
    173         _puts(" idle at cycle ");
    174         _putd(_get_proctime());
    175         _puts("\n");
    176         _tty_release_lock( 0 );
    177 #endif
    178 
    179178         count = GIET_IDLE_TASK_PERIOD;
    180179    }
Note: See TracChangeset for help on using the changeset viewer.