# 任务安排 ## 任务 ``` 今日任务: 阅读整体代码 ``` ## 时间消耗 以一个小时为单位 | 时间 | 做了什么 | | :---- | --------------- | | 9-12 | 阅读整体代码 | | 13-14 | 理解systick实现 | | | | | | | ## 总结 ``` --------------------------------------------------------------------------------------------------------- main---->unused_gpio_init() ---->gpio_init() ----->led_gpio_init() --->GPIO_SET(a,22,!,state) -->GPIOwrite(gpio_pin##pin,! state ? 1:0 ) //原理图为低电平点亮 ------>key_gpio_init() ---->t16_pa4_init()---->设置pwm输出 ---->按键初始化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 s_keys[1] = "gears key",port_gpio_get_gears_key_state s_keys[2] = "interval key",.......... s_keys[3] = "switch key", ........... 按键初始化理解:skey_t初始化的函数仅仅是对每个按键调用的,处理的是按键状态,key_module中的是整个按键模块使用,处理的是按键逻辑。 例如,一个返回值为bool量的函数指针,结构中初始化为指向所需函数,详细见图1. starting up--->开机标志,定时关闭,-->update_ozone_work_level更新工作等级。 等级低:关闭风扇,占空比0,频率1 等级中: 等级高:设置频率,根据频率计算占空比。打开rgb灯。 是否间隔工作(逻辑待看)。。 ---->初始化完毕,开机。 ----->轮询do_it_each_ms,每1ms进入中断,全局变量加1。-->通过端口port_haspassed_ms得知已经过去的时间,如果大于设定time。就把比较值更新。((超时问题请见下图,,,)) while(1) { debug灯轮询;200ms key轮询 { port_gpio_get_timer_key_state <-------->each->get_key_state(); 判断是否是当前状态是否和上次相同,如果相同并且保持一个周期, 那么进行滤波处理。(其中,上次last_io和after_filter已经初始化完成,为上电读取状态。) 之后送入滤波处理,得到上升,下降,保持); 滤波处理----》如果当前状态不是上个状态,说明状态改变。如果当前状态是1,说明之前没按下,但经历了上升沿,进行初始化。 不然对从1-》0是下降沿,初始化按键。 都不是的话,当前状态为持续按下按键。 以上都送入onkeyh } } g_systick_time = 0; //全局时间变量 void sys_tick_irq{ g_systick++; } void get_systick(return g_systick); int delay_ms(uint32_t time) { now_time = get_systick(); if(now_time > time) return nowtime-time; } void doit_each_ms(int time) { int has_passed = delay_ms(time); if(haspassed > time) } intmain { doit_eahcms(200); } ``` ![image-20220331171159926](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331171159926.png) ![image-20220331170533223](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331170533223.png) ![image-20220331171317924](C:\Users\zwsd_cad3\Desktop\zhangyuan_task\新日记\markdown.assets\$(filename).assets\image-20220331171317924.png)