基于 STM32、FreeRTOS 和 LVGL 的强大智能手表。
中文 | English
bilibili主页 | 硬件开源 | V2.3新增功能视频 | V2.2演示视频
### 3.数据存储 目前使用的外部的EEPROM进行数据存储,主要用于存储设置等,详细可以看`Datasave.c`文件。 ### 4.页面切换逻辑 为了实现页面切换,可以返回上次的界面,这里使用了一个栈来存储页面对应的,例如,使用`user_Stack_Pop(&ScrRenewStack);`弹出上一个界面,然后进入到新的界面再使用 `user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);`入栈一个界面的指针地址。注意不能直接在push操作使用类似`ui_HomePage`入栈,它是会动态变化的,这是个很大的坑。 ```c //key1 pressed if(keystr == 1) { user_Stack_Pop(&ScrRenewStack); if(user_Stack_isEmpty(&ScrRenewStack)) { ui_MenuPage_screen_init(); lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true); user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage); user_Stack_Push(&ScrRenewStack,(long long int)&ui_MenuPage); } else if(ScrRenewStack.Data[ScrRenewStack.Top_Point-1] == (long long int)&ui_HomePage) { ui_HomePage_screen_init(); lv_scr_load_anim(ui_HomePage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true); } } ``` ### 5.计算器逻辑 计算器的逻辑就是很经典的计算器问题,经典的就是开两个栈,一个存放符号,一个存数字,然后进行出栈计算等等操作,以`1+2*6/3`为例,具体的过程如下动图所示。但是会有一个问题就是小数点,这个动图展示的只是整数计算的逻辑,带小数点的详细见代码。 具体过程是: 1. 遍历表达式,当遇到操作数,将其压入操作数栈。 2. 遇到运算符时,如果运算符栈为空,则直接将其压入运算符栈。 3. 如果运算符栈不为空,那就与运算符栈顶元素进行比较:如果当前运算符优先级比栈顶运算符高,则继续将其压入运算符栈,如果当前运算符优先级比栈顶运算符低或者相等,则从操作数符栈顶取两个元素,从栈顶取出运算符进行运算,并将运算结果压入操作数栈。 4. 继续将当前运算符与运算符栈顶元素比较。 5. 继续按照以上步骤进行遍历,当遍历结束之后,则将当前两个栈内元素取出来进行运算即可得到最终结果。
### 6.LVGL在windows在vscode的仿真配置参考 参考链接: https://blog.csdn.net/weixin_49337111/article/details/136536375 已经更改好的可以跑的代码放在了`lv_sim_vscode_win`这个文件夹中,应该改一下配置的路径就可以直接使用vscode打开使用,记得改工程设置的路径。
### 7.UI App如何移植 如果有更改UI App或者新加入UI App直接在仿真器中改好,然后直接复制`Func`文件夹和`GUI_App`文件夹去`keil`工程中的`User`文件夹即可。现在使用了一个`HWDataAccess.c`文件作为中间层,方便移植,如果是在仿真中,那么直接将`HW_USE_HARDWARE`设置为0即可跑通。 ## Contributing 1. Fork it! 2. Create your feature branch: `git checkout -b my-new-feature` 3. Commit your changes: `git commit -am 'Add some feature'` 4. Push to the branch: `git push origin my-new-feature` 5. Submit a pull request!
暂无开放 Issues,或尚未同步最近议题。