diff -uwr ChibiOS-stable_rusefi/demos/STM32/RT-STM32F334R8-NUCLEO/mcuconf.h ChibiOS-stable_16.1.x/demos/STM32/RT-STM32F334R8-NUCLEO/mcuconf.h --- ChibiOS-stable_rusefi/demos/STM32/RT-STM32F334R8-NUCLEO/mcuconf.h 2017-12-04 11:35:28.558720500 -0500 +++ ChibiOS-stable_16.1.x/demos/STM32/RT-STM32F334R8-NUCLEO/mcuconf.h 2017-12-04 11:31:43.327707100 -0500 @@ -67,7 +67,7 @@ #define STM32_ADC_USE_ADC1 FALSE #define STM32_ADC_USE_ADC2 FALSE #define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1) -#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1) #define STM32_ADC_ADC1_DMA_PRIORITY 2 #define STM32_ADC_ADC2_DMA_PRIORITY 2 #define STM32_ADC_ADC12_IRQ_PRIORITY 5 Only in ChibiOS-stable_16.1.x: doc diff -uwr ChibiOS-stable_rusefi/os/common/ports/ARMCMx/compilers/GCC/rules.mk ChibiOS-stable_16.1.x/os/common/ports/ARMCMx/compilers/GCC/rules.mk --- ChibiOS-stable_rusefi/os/common/ports/ARMCMx/compilers/GCC/rules.mk 2017-12-04 11:35:28.945324300 -0500 +++ ChibiOS-stable_16.1.x/os/common/ports/ARMCMx/compilers/GCC/rules.mk 2017-12-04 11:31:43.777345900 -0500 @@ -93,9 +93,8 @@ TCOBJS := $(addprefix $(OBJDIR)/, $(notdir $(TCSRC:.c=.o))) TCPPOBJS := $(addprefix $(OBJDIR)/, $(notdir $(TCPPSRC:.cpp=.o))) ASMOBJS := $(addprefix $(OBJDIR)/, $(notdir $(ASMSRC:.s=.o))) -#ASMXOBJS := $(addprefix $(OBJDIR)/, $(notdir $(ASMXSRC:.S=.o))) -#OBJS := $(ASMXOBJS) $(ASMOBJS) $(ACOBJS) $(TCOBJS) $(ACPPOBJS) $(TCPPOBJS) -OBJS := $(ASMOBJS) $(ACOBJS) $(TCOBJS) $(ACPPOBJS) $(TCPPOBJS) +ASMXOBJS := $(addprefix $(OBJDIR)/, $(notdir $(ASMXSRC:.S=.o))) +OBJS := $(ASMXOBJS) $(ASMOBJS) $(ACOBJS) $(TCOBJS) $(ACPPOBJS) $(TCPPOBJS) # Paths IINCDIR := $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR)) @@ -227,14 +226,14 @@ @$(AS) -c $(ASFLAGS) -I. $(IINCDIR) $< -o $@ endif -#$(ASMXOBJS) : $(OBJDIR)/%.o : %.S Makefile -#ifeq ($(USE_VERBOSE_COMPILE),yes) -# @echo -# $(CC) -c $(ASXFLAGS) $(TOPT) -I. $(IINCDIR) $< -o $@ -#else -# @echo Compiling $(threadrx, MSG_TIMEOUT); \ - osalSysUnlockFromISR(); \ -} -#else /* !UART_USE_WAIT */ -#define _uart_wakeup_rx_timeout_isr(uartp) -#endif /* !UART_USE_WAIT */ - /** * @brief Common ISR code for early TX. * @details This code handles the portable part of the ISR code: @@ -275,27 +258,6 @@ } /** - * @brief Common ISR code for RX half-transfer data. - * @details This code handles the portable part of the ISR code: - * - Callback invocation. - * - Waiting thread wakeup, if any. - * - Driver state transitions. - * . - * @note This macro is meant to be used in the low level drivers - * implementation only. - * - * @param[in] uartp pointer to the @p UARTDriver object - * @param[in] full flag set to 1 for the second half, and 0 for the first half - * - * @notapi - */ -#define _uart_rx_half_isr_code(uartp, full) { \ - if ((uartp)->config->rxhalf_cb != NULL) \ - (uartp)->config->rxhalf_cb(uartp, full); \ -} - - -/** * @brief Common ISR code for RX error. * @details This code handles the portable part of the ISR code: * - Callback invocation. @@ -317,6 +279,7 @@ _uart_wakeup_rx_error_isr(uartp); \ } + /** * @brief Common ISR code for RX on idle. * @details This code handles the portable part of the ISR code: @@ -335,28 +298,6 @@ if ((uartp)->config->rxchar_cb != NULL) \ (uartp)->config->rxchar_cb(uartp, (uartp)->rxbuf); \ } - -/** - * @brief Timeout ISR code for receiver. - * @details This code handles the portable part of the ISR code: - * - Callback invocation. - * - Waiting thread wakeup, if any. - * - Driver state transitions. - * . - * @note This macro is meant to be used in the low level drivers - * implementation only. - * - * @param[in] uartp pointer to the @p UARTDriver object - * - * @notapi - */ -#define _uart_timeout_isr_code(uartp) { \ - if ((uartp)->config->timeout_cb != NULL) { \ - (uartp)->config->timeout_cb(uartp); \ - } \ - _uart_wakeup_rx_timeout_isr(uartp); \ -} - /** @} */ /*===========================================================================*/ diff -uwr ChibiOS-stable_rusefi/os/hal/lib/streams/chprintf.c ChibiOS-stable_16.1.x/os/hal/lib/streams/chprintf.c --- ChibiOS-stable_rusefi/os/hal/lib/streams/chprintf.c 2017-12-04 11:35:33.919377400 -0500 +++ ChibiOS-stable_16.1.x/os/hal/lib/streams/chprintf.c 2017-12-04 11:31:45.219171600 -0500 @@ -32,9 +32,7 @@ #include "memstreams.h" #define MAX_FILLER 11 -#define MAX_FLOAT_PRECISION 9 -#define DEFAULT_FLOAT_PRECISION 2 - +#define FLOAT_PRECISION 9 static char *long_to_string_with_divisor(char *p, long num, @@ -75,22 +73,15 @@ } #if CHPRINTF_USE_FLOAT -static const long pow10[MAX_FLOAT_PRECISION] = { +static const long pow10[FLOAT_PRECISION] = { 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 }; static char *ftoa(char *p, double num, unsigned long precision) { - if (num < 0) { - *p++ = '-'; - return ftoa(p, -num, precision); - } long l; - if (precision == 0) { - precision = DEFAULT_FLOAT_PRECISION; - } else if (precision > MAX_FLOAT_PRECISION) { - precision = MAX_FLOAT_PRECISION; - } + if ((precision == 0) || (precision > FLOAT_PRECISION)) + precision = FLOAT_PRECISION; precision = pow10[precision - 1]; l = (long)num; @@ -140,7 +131,6 @@ char tmpbuf[MAX_FILLER + 1]; #endif - while (true) { c = *fmt++; if (c == 0) diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv1/rtc_lld.c ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv1/rtc_lld.c --- ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv1/rtc_lld.c 2017-12-04 11:35:34.228184400 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv1/rtc_lld.c 2017-12-04 11:31:45.417294300 -0500 @@ -137,7 +137,7 @@ t = localtime_r((time_t *)&(tv_sec), &tim); osalDbgAssert(t != NULL, "conversion failed"); #else - t = localtime(&tv_sec); + struct tm *t = localtime(&tv_sec); memcpy(&tim, t, sizeof(struct tm)); #endif diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c --- ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c 2017-12-04 11:35:34.231184600 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c 2017-12-04 11:31:45.420294900 -0500 @@ -27,7 +27,6 @@ */ #include "hal.h" -#include "rusefi_lse_fix.h" #if HAL_USE_RTC || defined(__DOXYGEN__) @@ -76,11 +75,10 @@ * @notapi */ static void rtc_enter_init(void) { - int counter = 0; + RTCD1.rtc->ISR |= RTC_ISR_INIT; - while ((RTCD1.rtc->ISR & RTC_ISR_INITF) == 0 && ++counter < LSE_TIMEOUT) + while ((RTCD1.rtc->ISR & RTC_ISR_INITF) == 0) ; - } /** @@ -349,16 +347,13 @@ rtc_enter_init(); rtcp->rtc->TR = tr; rtcp->rtc->DR = dr; - rtcp->rtc->CR = (rtcp->rtc->CR & ~(1U << RTC_CR_BKP_OFFSET)) | - (timespec->dstflag << RTC_CR_BKP_OFFSET); + rtcp->rtc->CR |= timespec->dstflag << RTC_CR_BKP_OFFSET; rtc_exit_init(); /* Leaving a reentrant critical zone.*/ osalSysRestoreStatusX(sts); } -extern bool rtcWorks; - /** * @brief Get current time. * @note The function can be called from any context. @@ -379,13 +374,10 @@ /* Entering a reentrant critical zone.*/ sts = osalSysGetStatusAndLockX(); - int counter = 0; \ /* Synchronization with the RTC and reading the registers, note DR must be read last.*/ - while ((rtcp->rtc->ISR & RTC_ISR_RSF) == 0 && rtcWorks && ++counter rtc->ISR & RTC_ISR_RSF) == 0) ; - if (counter==LSE_TIMEOUT) {rtcWorks = false; } \ - #if STM32_RTC_HAS_SUBSECONDS ssr = rtcp->rtc->SSR; #endif /* STM32_RTC_HAS_SUBSECONDS */ diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.h ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.h --- ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.h 2017-12-04 11:35:34.233183400 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.h 2017-12-04 11:31:45.423295400 -0500 @@ -29,7 +29,6 @@ #ifndef _RTC_LLD_H_ #define _RTC_LLD_H_ - #if HAL_USE_RTC || defined(__DOXYGEN__) /*===========================================================================*/ Only in ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/RTCv2: rusefi_lse_fix.h diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/USARTv1/uart_lld.c ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/USARTv1/uart_lld.c --- ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/USARTv1/uart_lld.c 2017-12-04 11:35:34.288402400 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/USARTv1/uart_lld.c 2017-12-04 11:31:45.463299900 -0500 @@ -226,11 +226,6 @@ /* Mustn't ever set TCIE here - if done, it causes an immediate interrupt.*/ cr1 = USART_CR1_UE | USART_CR1_PEIE | USART_CR1_TE | USART_CR1_RE; - - /* Add Idle interrupt if needed */ - if (uartp->config->timeout_cb != NULL) - cr1 |= USART_CR1_IDLEIE; - u->CR1 = uartp->config->cr1 | cr1; /* Starting the receiver idle loop.*/ @@ -259,14 +254,7 @@ received character and then the driver stays in the same state.*/ _uart_rx_idle_code(uartp); } - /* DMA half-transter interrupt handling - for the 1st/2nd half transfers. */ - else if (uartp->config->rxhalf_cb != NULL) { - if ((flags & STM32_DMA_ISR_HTIF) != 0) { - _uart_rx_half_isr_code(uartp, 0); - } else if ((flags & STM32_DMA_ISR_TCIF) != 0) { - _uart_rx_half_isr_code(uartp, 1); - } - } else { + else { /* Receiver in active state, a callback is generated, if enabled, after a completed transfer.*/ dmaStreamDisable(uartp->dmarx); @@ -324,11 +312,6 @@ /* End of transmission, a callback is generated.*/ _uart_tx2_isr_code(uartp); } - - /* Idle interrupt sources are only checked if enabled in CR1.*/ - if ((sr & USART_SR_IDLE) && (cr1 & USART_CR1_IDLEIE)) { - _uart_timeout_isr_code(uartp); - } } /*===========================================================================*/ @@ -795,14 +778,8 @@ /* RX DMA channel preparation.*/ dmaStreamSetMemory0(uartp->dmarx, rxbuf); dmaStreamSetTransactionSize(uartp->dmarx, n); - - uint32_t mode = STM32_DMA_CR_DIR_P2M | STM32_DMA_CR_MINC | STM32_DMA_CR_TCIE; - - /* DMA half-transfer interrupt & circular mode, if needed */ - if (uartp->config->rxhalf_cb != NULL) - mode |= STM32_DMA_CR_HTIE | STM32_DMA_CR_CIRC; - - dmaStreamSetMode(uartp->dmarx, uartp->dmamode | mode); + dmaStreamSetMode(uartp->dmarx, uartp->dmamode | STM32_DMA_CR_DIR_P2M | + STM32_DMA_CR_MINC | STM32_DMA_CR_TCIE); /* Starting transfer.*/ dmaStreamEnable(uartp->dmarx); diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/USARTv1/uart_lld.h ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/USARTv1/uart_lld.h --- ChibiOS-stable_rusefi/os/hal/ports/STM32/LLD/USARTv1/uart_lld.h 2017-12-04 11:35:34.292402600 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/LLD/USARTv1/uart_lld.h 2017-12-04 11:31:45.465297000 -0500 @@ -461,14 +461,6 @@ typedef void (*uartecb_t)(UARTDriver *uartp, uartflags_t e); /** - * @brief Receive Half-transfer UART notification callback type. - * - * @param[in] uartp pointer to the @p UARTDriver object - * @param[in] full flag set to 1 for the second half, and 0 for the first half - */ -typedef void (*uarthcb_t)(UARTDriver *uartp, uartflags_t full); - -/** * @brief Driver configuration structure. * @note It could be empty on some architectures. */ @@ -510,16 +502,6 @@ * @brief Initialization value for the CR3 register. */ uint16_t cr3; - /* Additional (optional) handlers. Placed here for the struct compatibility.*/ - /** - * @brief Receiver timeout (idle) callback. - * @details Handles an idle interrupt for USARTv1. - */ - uartcb_t timeout_cb; - /** - * @brief Half-transfer receive buffer callback. - */ - uarthcb_t rxhalf_cb; } UARTConfig; /** diff -uwr ChibiOS-stable_rusefi/os/hal/ports/STM32/STM32F4xx/hal_lld.c ChibiOS-stable_16.1.x/os/hal/ports/STM32/STM32F4xx/hal_lld.c --- ChibiOS-stable_rusefi/os/hal/ports/STM32/STM32F4xx/hal_lld.c 2017-12-04 11:35:34.489018800 -0500 +++ ChibiOS-stable_16.1.x/os/hal/ports/STM32/STM32F4xx/hal_lld.c 2017-12-04 11:31:45.580831100 -0500 @@ -23,7 +23,6 @@ */ #include "hal.h" -#include "rusefi_lse_fix.h" /*===========================================================================*/ /* Driver local definitions. */ @@ -64,9 +63,6 @@ RCC->BDCR = 0; } - extern bool rtcWorks; - - #if STM32_LSE_ENABLED #if defined(STM32_LSE_BYPASS) /* LSE Bypass.*/ @@ -75,8 +71,7 @@ /* No LSE Bypass.*/ RCC->BDCR |= RCC_BDCR_LSEON; #endif - int waitCounter = 0; - while ((RCC->BDCR & RCC_BDCR_LSERDY) == 0 && rtcWorks && ++waitCounter BDCR & RCC_BDCR_LSERDY) == 0) ; /* Waits until LSE is stable. */ #endif Only in ChibiOS-stable_rusefi/os/hal/ports/simulator: posix diff -uwr ChibiOS-stable_rusefi/os/rt/include/chdebug.h ChibiOS-stable_16.1.x/os/rt/include/chdebug.h --- ChibiOS-stable_rusefi/os/rt/include/chdebug.h 2017-12-04 11:35:34.990159100 -0500 +++ ChibiOS-stable_16.1.x/os/rt/include/chdebug.h 2017-12-04 11:31:45.893508300 -0500 @@ -121,8 +121,8 @@ /*===========================================================================*/ #if CH_DBG_SYSTEM_STATE_CHECK == TRUE -#define _dbg_enter_lock() {(ch.dbg.lock_cnt = (cnt_t)1); ON_LOCK_HOOK;} -#define _dbg_leave_lock() {ON_UNLOCK_HOOK;(ch.dbg.lock_cnt = (cnt_t)0);} +#define _dbg_enter_lock() (ch.dbg.lock_cnt = (cnt_t)1) +#define _dbg_leave_lock() (ch.dbg.lock_cnt = (cnt_t)0) #endif /* When the state checker feature is disabled then the following functions diff -uwr ChibiOS-stable_rusefi/os/rt/ports/ARM/chcore.h ChibiOS-stable_16.1.x/os/rt/ports/ARM/chcore.h --- ChibiOS-stable_rusefi/os/rt/ports/ARM/chcore.h 2017-12-04 11:35:35.058164000 -0500 +++ ChibiOS-stable_16.1.x/os/rt/ports/ARM/chcore.h 2017-12-04 11:31:45.943509800 -0500 @@ -28,8 +28,6 @@ #ifndef _CHCORE_H_ #define _CHCORE_H_ -#include "chdebug.h" - /*===========================================================================*/ /* Module constants. */ /*===========================================================================*/ @@ -290,8 +288,6 @@ #define PORT_FAST_IRQ_HANDLER(id) \ __attribute__((interrupt("FIQ"))) void id(void) -void chDbgStackOverflowPanic(thread_t *otp); - /** * @brief Performs a context switch between two threads. * @details This is the most critical code in any port, this function @@ -309,7 +305,7 @@ #define port_switch(ntp, otp) { \ register struct port_intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ - chDbgStackOverflowPanic(otp); \ + chSysHalt("stack overflow"); \ _port_switch_thumb(ntp, otp); \ } #else @@ -322,7 +318,7 @@ #define port_switch(ntp, otp) { \ register struct port_intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ - chDbgStackOverflowPanic(otp); \ + chSysHalt("stack overflow"); \ _port_switch_arm(ntp, otp); \ } #else diff -uwr ChibiOS-stable_rusefi/os/rt/ports/SIMIA32/chcore.c ChibiOS-stable_16.1.x/os/rt/ports/SIMIA32/chcore.c --- ChibiOS-stable_rusefi/os/rt/ports/SIMIA32/chcore.c 2017-12-04 11:35:35.144185200 -0500 +++ ChibiOS-stable_16.1.x/os/rt/ports/SIMIA32/chcore.c 2017-12-04 11:31:45.999007700 -0500 @@ -25,12 +25,7 @@ * @{ */ -#if defined(WIN32) #include -#else - #include - #include -#endif #include "ch.h" @@ -114,18 +109,11 @@ * @return The realtime counter value. */ rtcnt_t port_rt_get_counter_value(void) { -#if defined(WIN32) LARGE_INTEGER n; QueryPerformanceCounter(&n); return (rtcnt_t)(n.QuadPart / 1000LL); -#else // POSIX - struct timeval tv; - - gettimeofday(&tv, NULL); - return (rtcnt_t)(tv.tv_usec); -#endif } /** @} */ diff -uwr ChibiOS-stable_rusefi/os/rt/src/chdebug.c ChibiOS-stable_16.1.x/os/rt/src/chdebug.c --- ChibiOS-stable_rusefi/os/rt/src/chdebug.c 2017-12-04 11:35:35.179205200 -0500 +++ ChibiOS-stable_16.1.x/os/rt/src/chdebug.c 2017-12-04 11:31:46.035008100 -0500 @@ -85,8 +85,6 @@ /* Module local definitions. */ /*===========================================================================*/ -extern int maxNesting; - /*===========================================================================*/ /* Module exported variables. */ /*===========================================================================*/ @@ -152,7 +150,7 @@ void _dbg_check_lock(void) { if ((ch.dbg.isr_cnt != (cnt_t)0) || (ch.dbg.lock_cnt != (cnt_t)0)) { - chSysHalt("SV#4 misplaced chSysLock()"); + chSysHalt("SV#4"); } _dbg_enter_lock(); } @@ -178,7 +176,7 @@ void _dbg_check_lock_from_isr(void) { if ((ch.dbg.isr_cnt <= (cnt_t)0) || (ch.dbg.lock_cnt != (cnt_t)0)) { - chSysHalt("SV#6 misplaced chSysLockFromISR()"); + chSysHalt("SV#6"); } _dbg_enter_lock(); } @@ -208,8 +206,6 @@ chSysHalt("SV#8"); } ch.dbg.isr_cnt++; - if (ch.dbg.isr_cnt > maxNesting) - maxNesting = ch.dbg.isr_cnt; port_unlock_from_isr(); } @@ -239,7 +235,7 @@ void chDbgCheckClassI(void) { if ((ch.dbg.isr_cnt < (cnt_t)0) || (ch.dbg.lock_cnt <= (cnt_t)0)) { - chSysHalt("SV#10 misplaced I-class function"); + chSysHalt("SV#10"); } }