2X-ercha / STC-B-bsp

一个菜鸡自己尝试写写学校单片机板子bsp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HNU信科院单片机STC-B BSP编写尝试

学校小学期时已经提供了徐成老师的BSP,但有些地方不太能容忍用户(应该说不明所以的学生)的bug行为(比如往各个事件回调函数塞大于最小周期(1ms)的延时函数)

以及自己想乱七八糟的试试单片机底层模块驱动编程,训练自己看引脚图和板卡软件手册的能力,所以就开始写这玩意了

(鱼佬:感觉像写个屎味巧克力冰激凌;我:应该是兼容屎味的巧克力冰淇淋)

适当参考鱼佬的https://github.com/FishyFizz/STC-B-OS

进度

  • 2022.10.11 - 完成数码管和led的显示(意味着时间中断也完成了)
  • 2022.10.12 - 添加以上回调函数接口
  • 2022.10.13 - 完成k1和k2的中断事件回调接口,完成按键的软件消抖
  • 2022.10.24 - 完成SM接口(类似GPIO,无事件回调)
  • 2022.10.25 - 完成k3和导航键kN的回调(20ms轮询和adc中断完成触发),完成其软件消抖
  • 2023.03.02 - 完成USBcom及其回调
  • 当前进度:编写调度器

FAQ

1. 为什么要额外写个调度器,按内置中断的优先级和嵌套规则不好吗:

我最早的想法是解决学校的bsp中,不靠谱的使用方(学生)往key的回调函数中塞延时delay函数导致数码管/led无法正常显示的问题,试图在底层完成这点,而在写的时候发现,学校bsp的按键采用轮询,回调函数注册在时间中断中才导致了这个问题。而软件消抖本身也导致了,不人为的编写调度器或者更改内置中断运行,按键的回调必须在时间中断下运行

解决这样的问题目前只剩下两条思路

  • 一是从硬件中断运行上入手,让timer0的中断能够自身嵌套
  • 二是将 时间外的输入类事件回调 在中断中加入调度队列,系统主线程再运行函数。故而中断中不直接运行事件回调(这比较像OS的做法)

个人倾向于第二条,因此预期实现一个FIFO的调度器(优先级先打咩~)

About

一个菜鸡自己尝试写写学校单片机板子bsp


Languages

Language:C 88.3%Language:Assembly 11.7%