新日记
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.7 KiB

3 years ago
  1. # 任务安排
  2. ## 任务
  3. ```
  4. 今日任务:
  5. 阅读整体代码
  6. ```
  7. ## 时间消耗
  8. 以一个小时为单位
  9. | 时间 | 做了什么 |
  10. | :---- | --------------- |
  11. | 9-12 | 阅读整体代码 |
  12. | 13-14 | 理解systick实现 |
  13. | | |
  14. | | |
  15. ## 总结
  16. ```
  17. ---------------------------------------------------------------------------------------------------------
  18. main---->unused_gpio_init()
  19. ---->gpio_init() ----->led_gpio_init() --->GPIO_SET(a,22,!,state)
  20. -->GPIOwrite(gpio_pin##pin,! state ? 1:0 ) //原理图为低电平点亮
  21. ------>key_gpio_init()
  22. ---->t16_pa4_init()---->设置pwm输出
  23. ---->按键初始化zkey_init(&key_module) ----> key_module 定义为zkey_module_t 类型,初始化利用s_keys,onkey完成初始化。z_module_t中的void (*onkey)(zkey_t *key,zkey_state_t key_state),为函数指针,在s_key中完成初始化,s_keys[0] = "time key",port_gpio_get_timer_key_state
  24. s_keys[1] = "gears key",port_gpio_get_gears_key_state
  25. s_keys[2] = "interval key",..........
  26. s_keys[3] = "switch key", ...........
  27. 按键初始化理解:skey_t初始化的函数仅仅是对每个按键调用的,处理的是按键状态,key_module中的是整个按键模块使用,处理的是按键逻辑。
  28. 例如,一个返回值为bool量的函数指针,结构中初始化为指向所需函数,详细见图1.
  29. starting up--->开机标志,定时关闭,-->update_ozone_work_level更新工作等级。
  30. 等级低:关闭风扇,占空比0,频率1
  31. 等级中:
  32. 等级高:设置频率,根据频率计算占空比。打开rgb灯。
  33. 是否间隔工作(逻辑待看)。。
  34. ---->初始化完毕,开机。
  35. ----->轮询do_it_each_ms,每1ms进入中断,全局变量加1。-->通过端口port_haspassed_ms得知已经过去的时间,如果大于设定time。就把比较值更新。((超时问题请见下图,,,))
  36. while(1)
  37. {
  38. debug灯轮询;200ms
  39. key轮询
  40. {
  41. port_gpio_get_timer_key_state <-------->each->get_key_state();
  42. 判断是否是当前状态是否和上次相同,如果相同并且保持一个周期, 那么进行滤波处理。(其中,上次last_io和after_filter已经初始化完成,为上电读取状态。)
  43. 之后送入滤波处理,得到上升,下降,保持);
  44. 滤波处理----》如果当前状态不是上个状态,说明状态改变。如果当前状态是1,说明之前没按下,但经历了上升沿,进行初始化。
  45. 不然对从1-》0是下降沿,初始化按键。
  46. 都不是的话,当前状态为持续按下按键。
  47. 以上都送入onkeyh
  48. }
  49. }
  50. g_systick_time = 0; //全局时间变量
  51. void sys_tick_irq{
  52. g_systick++;
  53. }
  54. void get_systick(return g_systick);
  55. int delay_ms(uint32_t time)
  56. {
  57. now_time = get_systick();
  58. if(now_time > time)
  59. return nowtime-time;
  60. }
  61. void doit_each_ms(int time)
  62. {
  63. int has_passed = delay_ms(time);
  64. if(haspassed > time)
  65. }
  66. intmain
  67. {
  68. doit_eahcms(200);
  69. }
  70. ```
  71. ![image-20220331171159926](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331171159926.png)
  72. ![image-20220331170533223](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331170533223.png)
  73. ![image-20220331171317924](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331171317924.png)