Separate the character processing from the interrupt handler using ring buffer #3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Separate the character processing from the interrupt handler using a ring buffer:
keybuff.c
andkeybuff.h
keyboard.c
by using the new scancode ring bufferkeyproc.c
andkeyproc.h
which will be called outside of an interrupt.keyboard_flush
will flush the contents of the scancode buffer. Callingprocess_key
can be called outside of an interrupt to process the next scancode if one is available. Callingprocess_keys
will process all the keys until the scancode buffer is empty.main.c
to go into an infinite loop callingprocess_keys
waiting for an interrupt between each call.process_keys
so that keyboard input continues to be processed while the multitasking code is runningNote: I didn't fix the bugs related to task switching that only allows TaskA and TaskB to switch.
Information on ring buffers (circular buffers) can be found on Wikipedia and Stackoverflow.