本帖最后由 guo8113 于 2016-8-28 11:15 编辑
是时候回到项目了,花了不少时间移植了ucGUI+ FreeRTOS, 这就为要做的应用提供了一个框架。网上的参考还是比较多的,ucGUI和FreeRTOS都可以找到。由于没怎么用过ucGUI所以使用起来也花了不少时间,同时也要提一个improvement,rtc的hardware demo是没有Al
ARM设置的,这也导致起初在RTC上讨论了一翻,也测试了一番。
我会给出我的所有代码,为了倡导开源,代码采用LGPL license,用了此代码,也必须开源。欢迎大家在此基础上进行开发。 当然时间仓促,代码质量很差,将就看看吧。
我目标是实现一个好用的、界面友好的电器控制中心,说白了就是控制继电器:
1. 万年历,最基本的功能提供时间与多组定时功能
。【已完成】
2. 环境检测,最起码芯片内部的温度可以采集
。【很简单,不打算做了】
3. 多组定时开/关继电器
。【已完成】
4. 低功耗 【已完成】
已知的bug: 目前采用alarm.c 里的Alarm_SetOneAlarm()函数设置闹钟,目前的实现对于多个闹钟的设置有问题,也就是说本意想可设多组闹钟,触发后自动重装下一组闹钟,此功能尚不完善。
在开发过程中还是遇到了一些问题,比如万年历的实现,一开始没有用ucGUI,那叫一个痛苦,检测触摸屏要算坐标;再有用FreeRTOS时多个任务间的同步互斥,也是需要思考。屏幕校准、时钟显示、超时息屏。。。。。还有一个很难受的问题是,Flash不够用了,128KBflash用了RTOS和ucGUI 后基本差不多了用的, 还好KEIL可以对不同的文件实行不同优化,MM的驱动优化后就不能跑了,所以只优化ucGUI和FreeRTOS,优化后多了点空间。
后来优化-O3代码大小不怎么变化了,还是不够用,于是找了KEIL如何优化代码大小,这个帖子可以参考
http://blog.csdn.net/abclixu123/ar
ticle/details/46923725
好歹可以放的下代码了,本来想搞个FATFS,留后面有时间搞吧。
目前终于搭起了框架,实现的功能仅仅是时间设置、闹钟设置功能,但是可以基于此框架继续完善功能。还有UI的设计挺耗时间就不折腾了,下面是运行效果。
周末又是一天折腾,实现了触摸屏校准和控制中心应用选择,如图:
最重要的是实现了多组定时控制的功能,目前还没有集成到UI 中,通过串口输出8组定时数据,定时数据会保存在EEPROM中,所以掉电也不会丢失。
继续编程 , 经过一天的努力终于把闹钟显示控制界面搞定了,这个过程中遇到了个问题,我在两个对话框里的控件使用了相同的ID导致了软件莫名其妙的行为,起初以为只有一个对话框里的控件ID不同就可以,看来要所有用到的控件的ID都应该不同,后来调试过程中貌似又不是这个原因,目前仍存在一定的bug,不得而知。下图是 采用ucGUIBuilder创建的对话框:
查找可用的GPIO, 看了下引出来的排针基本上都被LCD之类的占用了。引脚还是有点少,只能使用RF接口的两个pin了:PA4,PC4;这个是最简单的控制GPIO, 在软件中通过了PendSV的形式来控制,RTC闹钟中断后,在中断的下半部实现GPIO控制。
然后实现了低功耗设计:
1. FreeRTOS低功耗,简单来说就是采用tickless idle,
在FreeRTOSConfig.h里定义
#define configUSE_TICKLESS_IDLE 1
采用FreeRTOS实现的空闲时不进行Systick唤醒来实现基本的低功耗。
2. 关闭外设,耗电最大的应该是屏幕,对屏幕进行超时关闭,一段时间没有操作,会关闭屏幕,通过点击屏幕或按键实现屏幕的唤醒。
更加详细的实现请参考源码(19楼),后面有时间会开贴讲解。
最后感谢灵动,感谢大家能够指出不足或继续开发。
18