[2.0.x] Small assorted collection of fixes and improvements (#10911)
* Misc fixes and improvements - Get rid of most critical sections on the Serial port drivers for AVR and DUE. Proper usage of FIFOs should allow interrupts to stay enabled without harm to queuing and dequeuing. Also, with 8-bit indices (for AVR) and up to 32-bit indices (for ARM), there is no need to protect reads and writes to those indices. - Simplify the XON/XOFF logic quite a bit. Much cleaner now (both for AVR and ARM) - Prevent a race condition (edge case) that could happen when estimating the proper value for the stepper timer (by reading it) and writing the calculated value for the time to the next ISR by disabling interrupts in those critical and small sections of the code - The problem could lead to lost steps. - Fix dual endstops not properly homing bug (maybe). * Set position immediately when possible
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							ae1be0fa53
						
					
				
				
					commit
					d3c02410a8
				
			@@ -119,8 +119,11 @@ void HAL_init();
 | 
			
		||||
  #define analogInputToDigitalPin(p) (p)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CRITICAL_SECTION_START  noInterrupts();
 | 
			
		||||
#define CRITICAL_SECTION_END    interrupts();
 | 
			
		||||
#define CRITICAL_SECTION_START  uint32_t primask = __get_PRIMASK(); __disable_irq()
 | 
			
		||||
#define CRITICAL_SECTION_END    if (!primask) __enable_irq()
 | 
			
		||||
#define ISRS_ENABLED() (!__get_PRIMASK())
 | 
			
		||||
#define ENABLE_ISRS()  __enable_irq()
 | 
			
		||||
#define DISABLE_ISRS() __disable_irq()
 | 
			
		||||
 | 
			
		||||
// On AVR this is in math.h?
 | 
			
		||||
#define square(x) ((x)*(x))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user