I have been looking at using both cores on PortalPlayer based devices
(iPod, Sansa E200, iRiver H10.)
I think that supporting this is going to require changes to the threading
API so that threads can be run on both cores.
1. Changing the variables in thread.c such as num_threads to be arrays
(e.g. num_threads[NUM_CPUS]) I don't think that any of these variables
get referenced from outside thread.c apart from by the debugging menus.
2. Adding functions to create/remove a thread from a specific core:
int create_thread_on_core(unsigned int core, void (*function)(void),
void* stack, int stack_size, const char *name)
void remove_thread_from_core(unsigned int core, int threadnum)
3. Changing the existing create/remove_thread to be:
int create_thread(void (*function)(void), void* stack, int stack_size,
const char *name)
return create_thread_on_core(CURRENT_CORE, function, stack, stack_size,
void remove_thread(int threadnum)
CURRENT_CORE would be the core that the thread is being created from.
This would mean that the only code changes necessary outside of thread.c
would be in the debug menu.
What does everyone think?
Received on 2006-08-07