-
Notifications
You must be signed in to change notification settings - Fork 33
Open
Labels
Description
As the openMMC project has grown, it accumulated some cruft that made it difficult to port to new boards and hard to debug. I propose bellow some enhancements that I think would greatly benefit the overall user and programmer experience. This list is not set in stone and may it change according to our priorities.
Short-term (can be implemented now):
- Merge all afcv3.x ports into a common code base Create new builds for different boards, not different versions #49 Merge AFC boards ports #96 Configure clock switch via IPMI and save it to the FRU EEPROM #123
- Merge common code between afcv3.x and afcv4.x Move vTaskPayload from board specific directory to a generic implementation in modules/ #132
- Better separate application specific code from board support code
- Consistent error passing and error checking across functions
- Move debug / flash logic to microcontroller specific port
- Proper header include discipline, eliminate 'include all' headers to make it easy to track code dependencies
- Firmware update integrity check
- Better GPIO abstraction, user code shouldn't be concerned if the GPIO is behind an I/O expander or not
- Include a command line interface to ease debugging Implement a Command Line Interface #81
- Better documentation: Document all functions using doxygen that are not documented yet. When implementing a functionality defined by some standard, cite the standard, page number, chapter, etc.
- Remove AFCv3 / AFCv4 specific code from RTM-8SFP and RTM-LAMP Improve AFCv3.1 RTM presence detection workaround #181 Proper separation of RTM power up and power down responsabilities #204
- Move from Travis CI to Github Actions
- Separate I2C mapping tables for RTM and AFC boards Separate the I2C chipid map for AFC devices and RTM devices #179
- Separate clock switch configuration from board port Configure clock switch via IPMI and save it to the FRU EEPROM #123
- Use OpenOCD + cmsis-dap / jlink / ftdi probes, deprecate LPCLink1 (move to a separate script) Use openOCD as an alternative to program the LPC controller #79
- Move bootloader source to uncontroller port as it is microcontroller specific
Medium-term (requires careful planning):
- Avoid creating a new task for each sdr
- Check every memory allocation and do proper handling of out-of-memory and memory fragmentation situations
- Detect and report stack overflow cases (FreeRTOS already has support for detecting stack overflows, what is left to do is printing the task backtrace to de serial console and resseting the firmware)
- Avoid macro functions, use static inline where adequate
- Replace the lpcopen hardware abstraction layer library with the CMSIS driver to avoid licensing problems (https://github.com/ARM-software/NXP_LPC/tree/master/LPC1700/CMSIS/Driver https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/Driver/Include) or rewrite the necessary parts from scratch
- Bufferred interrupt based UART to avoid blocking Enable UART interrupts and buffering to avoid blocking #108
- Proper I2C master driver (interrupt based, block tasks using semaphores not loops, transparent I2C mux configuration)
- Use a thread-safe printf implementation the printf in printf-stdarg.h is not thread safe #90
- Refactor cmake build scripts, avoid build flags all over the place
- Run bootloader from RAM to allow self update
Long-term (low priority, requires more complex changes):
- Better use of Continuous Integration Create new port to act as mock-up hardware for tests without hardware #97
- Enable MPU for cortex-m3/4 microcontrollers, use the FreeRTOS MPU port
Reactions are currently unavailable