Worked around GCC-AVR strange behavior in AVR port.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10023 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
ffea5d743b
commit
163b3562c0
|
@ -69,7 +69,7 @@ bool __avr_in_isr;
|
|||
#if !defined(__DOXYGEN__)
|
||||
__attribute__((naked, weak))
|
||||
#endif
|
||||
void port_switch(thread_t *ntp, thread_t *otp) {
|
||||
void _port_switch(thread_t *ntp, thread_t *otp) {
|
||||
|
||||
asm volatile ("push r2");
|
||||
asm volatile ("push r3");
|
||||
|
|
|
@ -340,6 +340,22 @@ struct port_context {
|
|||
*/
|
||||
#define PORT_FAST_IRQ_HANDLER(id) ISR(id)
|
||||
|
||||
/**
|
||||
* @brief Performs a context switch between two threads.
|
||||
* @details This is the most critical code in any port, this function
|
||||
* is responsible for the context switch between 2 threads.
|
||||
* @note The implementation of this code affects <b>directly</b> the context
|
||||
* switch performance so optimize here as much as you can.
|
||||
*
|
||||
* @param[in] ntp the thread to be switched in
|
||||
* @param[in] otp the thread to be switched out
|
||||
*/
|
||||
#define port_switch(ntp, otp) { \
|
||||
_port_switch(ntp, otp); \
|
||||
asm volatile ("" : : : "memory"); \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Port-related initialization code.
|
||||
* @note This function is empty in this port.
|
||||
|
@ -359,7 +375,7 @@ struct port_context {
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void port_switch(thread_t *ntp, thread_t *otp);
|
||||
void _port_switch(thread_t *ntp, thread_t *otp);
|
||||
void _port_thread_start(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue