我想使用 Xilkernel 实现线程之间的上下文切换,但是没有原始的 POSIX 兼容允许停止然后恢复线程的执行。
有没有人可以帮助我?
请您参考如下方法:
我使用此 C 代码为 FPGA 进行上下文切换。如果您觉得它很有用并且想要获得更多周围的代码,请询问我。
/*
* threadswitch - change thread
*
* The thread stack-pointer is supplied as a parameter.
* The old thread's stack-pointer value is saved to the array
* thread_info_array, and a new thread is selected from the array.
* The stack pointer of the new thread is returned.
*/
unsigned int * threadswitch( unsigned int * old_sp )
{
unsigned int * new_sp;
number_of_thread_switches += 1; /* Increase thread-switch counter. */
/* Print line 1 of an informational message. */
printf( "\nPerforming thread-switch number %d. The system has been running for %d ticks.\n",
number_of_thread_switches,
get_internal_globaltime() );
/* Save the stack pointer of the old thread. */
thread_info_array[ currently_running_thread ].thread_sp = old_sp;
/* Print part 1 of a message saying which threads are involved this time. */
printf( "Switching from thread-ID %d ",
thread_info_array[ currently_running_thread ].thread_id );
/* Perform the scheduling decision (round-robin). */
currently_running_thread += 1;
if( currently_running_thread >= current_thread_count )
{
currently_running_thread = 0;
}
/* Print part 2 of the informational message. */
printf( "to thread-ID %d.\n",
thread_info_array[ currently_running_thread ].thread_id );
/* Get the stack pointer of the new thread. */
new_sp = thread_info_array[ currently_running_thread ].thread_sp;
/* Return. */
return( new_sp );
}