Maybe switch to C99 (to allow inline). (or maybe not!)
Allow the user to define its own Panic() function
Be compatible with C++ user tasks
Be compatible with Rust task.
Be compatible with Go tasks ?
Looks complicated, due to the presence of the garbage collector…
Add a license and define a file header to add to each file for distribution
Pick a version numbering model.
Providing links and documentation over the Internet.
Write documentation about header files organization
For context saving: Allow the user to define a task with no context saving
Add a CONTRIBUTING file and update README.md about that
Prefix Lazuli structs in userspace with “Lz_”
Add an “end of file” comment marker at the end of each file.
For example programs: write the purpose of each program.
Replace Arch_DisableInterrupts() with Arch_DisableInterruptsGetStatus() where possible.
When using CONFIG_CHECK_XXXXX, unify the calls to Panic() or return.
Decide which one is the best.
Rename some functions for API consistency:
Lz_Run() => Lz_System_Run()
Lz_RegisterTask() => Lz_System_RegisterTask() (or Lz_Task_Register)
Add non blocking mutex lock
Something like bool Lz_Mutex_TryLock(Lz_Mutex * const mutex);
Lz_Pipe, Lz_Pipe_Read(), Lz_Pipe_Write(), Lz_Pipe_TryRead()
Move linked lists functions declarations in a kernel header file.
The user list.h header file will only contain the definition of structs.
Find a way to get rid of #including AVR interrupts header file in kernel code.
If threads are killed/crash while holding locks, what happens?
For Cpu_Sleep -> Maybe combine the 3 calls in 1 ASM call.
Generate doxygen documentation for stdint.h.
Make it ZERO dynamic allocation.
Allow the user to statically define the structures needed by the system (in particular tasks + stacks)
Place the incremental memory allocator in a separate module. By the way, the incremental memory allocator is not thread safe.
In documentation about modules:
After creating the module directory:
Update CMakeLists.txt to add_subdirectory.
Update config.h.in to add the configuration macro constant.
In .dir-locals.el add configuration for C style.
In .bashrc of the Docker image: display a warning if the version of the image doesn’t match the version of the repository.
CMake config : prefix the config cache variables by their respective categories.
Implement scheduler queues with AVL trees.
Think about defining the execution of the main() function in the idle task.
i.e. Execution begins as the idle task, and user tasks are created from the idle task.
This allows/ease the implementation of Pthread API.
Carefully think about priorities.
For PROGMEM, implement “memcpy_P”: Memory_CopyFromProgmem
Test command “apropos” in man pages of the Docker image.
In the Docker image, make sure to respect the File Hierarchy Standard
Doxygen seems to have problems dealing with 2 header files of the same name in different directories
mandb: can’t open /usr/share/man/man3/sys_clock_24.h.3: No such file or directory
Check if it’s a real bug, and declare the issue to the Doxygen project.
mandb: warning: /usr/share/man/man3/Clock24_Increment.3.gz: bad symlink or ROFF `.so’ request
Think about renaming the GitHub repository to “LazuliRTOS”.
Host the Lazuli docker image to GitHub instead of docker.io.
Think about moving libc header files to the directory include/
See if we can also get rid of directory libc/, as the corresponding functionalities are actually implemented as kernel modules
See if it would be necessary to declare all global variables used the scheduler.c and kernel.c as ‘volatile’.