This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
2019.11.16
实现内部和外部内存分配, 移植NES模拟器
2019.11.17
使用文件系统列表显示游戏文件,成功显示中文
2019.11.19
中文字库移入外置FLASH中
解决内部内存泄漏的bug
实现类似手机的滑动菜单
2019.11.20
滑动菜单支持按键控制
2019.11.21
在内存有限的情况下使用单一窗口绘制按键驱动的菜单
2019.11.22
实现Unicode, GBK, UTF8汉字编码相互转化
2019.11.24
解决内存分配在分配大内存时溢出的bug
新增图片解码,并可以通过滑屏来查看大于屏幕的图片
2019.11.25
打算自己实现窗口管理,写完了窗口框架,明天写消息驱动
2019.11.26
大致写完了消息驱动,可以检测触屏的点击,长按,滑动等动作
2019.11.27
实现窗口无效化机制,可以以阻塞或非阻塞状态运行窗口
2019.11.28
加入页面窗口,可以绘制图片背景
2019.11.29
窗口管理器基本完成,通过继承 WIN_WindowStruct 类即可获得所有窗口特性
2019.11.30
MYWIN增加软件定时器, 实现窗口内文字滚动
WIN_WindowStruct 支持图片背景
可以在绘图过程中动态设置窗口无效区
2019.12.1
层复制使用dma, 大大提高速度
优化图片复制算法,似乎并没有什么用
2019.12.2
写了按键交互逻辑
基于RT-Thread ,运行MYWIN成功
2019.12.3
加入垂直同步,避免闪烁
添加简单的时间设置对话框,用于设置时间
阻塞窗口支持嵌套
实现文件管理器,可以查看和选择文件
2019.12.4
新增窗口运行回调函数
与硬件交互的内容:
UI->硬件
切换至省电模式 ->关蓝牙, 关心率, 关NFC,
切换至伞训模式 ->开蓝牙, 开心率, 开NFC
关机 ->关所有外设,芯片休眠
获取当前时间
设置时间
设置屏幕亮度 ->亮屏,灭屏,调整亮度设置等
获取屏幕亮度 ->调整屏幕亮度设置中呈现
打开或关闭自动亮度
获取本地信息 ->经纬度,速度,高度等
获取心率信息
获取蓝牙设备 ->蓝牙名称, MAC, 编号
连接指定蓝牙设备 ->以名称, MAC, 或者编号来指定
获取电池电量
获取传感器状态 ->蓝牙, 心率, NFC
硬件->UI
切换至伞训模式 ->NFC有新数据刷入
设置新时间 ->NFC有时间数据刷入
亮屏 ->姿态传感器感应到抬手动作/NFC有数据刷入
2019.12.5
新增弹出菜单窗口
2019.12.6
实现拼音输入法
2019.12.10
实现USB虚拟串口
通过虚拟串口下载数据到flash
定义数据包格式
0xff,0xff开头,len_h,len_l长度,data0...datan数据,
数据包中data部分格式
|len,数据长度, cmd, 数据类型, data0...datan数据有效部分, crc_h,crc_lCRC校验
||其中cmd==0x01时表示下载数据
||data部分在下载数据时的格式
|||cmd,下载步骤, data0...datan
|||其中cmd==0x01表示数据是文件名称
||| cmd==0x02表示文件大小
||| cmd==0x03表示正在下载
|||data部分含义
||||当cmd==0x01时
||||nams0...namesn文件名
||||当cmd==0x02时
||||size4,size3,size2,size1,用4个字节表示文件大小, 高字节在前
||||当cmd==0x03时
||||packet_all两个字节总的数据包个数, packet_now两个字节当前数据包, data0...datan文件数据
2019.12.13
USB虚拟串口有个神奇的问题, 发送数据中不能有大量FF, 有FF会导致极大概率通信失败, 消除发送数据中的FF可以提高发送成功率
失败之后经过观察单片机端不会产生DataOut中断, 但是打开和关闭串口可以正常执行, 电脑端使用抓包软件能够抓到发送失败的数据包
初步排除由单片机端程序跑飞导致的通信失败,因为在通信失败之后不重启单片机通过卸载电脑端的串口驱动再重新安装可以使通信恢复正常
现怀疑是USB线损太大或者电脑端USB口电源供电不稳定, 发送FF数据时失真导致通信失败,
但是通过修改配置描述符把供电方式改为总线供电, 最大电流改为400ma问题依然存在
采取了一种取巧的办法, 把要发送的数据的一个字节拆分为两个字节, 每个字节只传输4位, 另外4位补0, 这样可以避免FF数据的产生
解决添加文件的时候导致FLASH被全部擦除的BUG。
实现系统文件管理, 可以删除文件, 也可以通过USB下载新的文件
2019.12.16
按键新增长按触发次数
新增id成员用于唯一标识一个窗口
msg结构体新增成员data2
2019.12.17
处理窗口删除操作时可能产生野指针的风险
使用窗口id唯一区分现在和已销毁的具有相同指针的窗口
通过重新设置基本窗口的消息回调函数进行全局按键消息的响应,
在窗口管理器没有运行阻塞窗口的情况下可以响应全局按键消息,
可以响应的消息是, KEY_LIGHT 短按, KEY_DES 短按-长按, KEY_ENTER 长按, KEY_HOME 长按, KEY_UP 长按, KEY_DOWN 长按
全局按键消息不能在非阻塞窗口应用中重复响应
把setting页面, mode页面, filder页面, sysfile页面, 设置为非阻塞窗口
实现gif解码及显示
2019.12.18
解决解码一次gif图片之后再解码另一幅gif时会出现异常的bug
所有图像显示窗口调整为居中显示
新增定时器去初始化函数, 解决定时器初始化相关的bug
实现GIF开关机动画
调整了SDRAM使用, 在不使用双层和emWin时用户可用内存增大
2019.12.23
解决清屏函数会清掉窗口外界面的bug
窗口时间更新使用软件定时器自动更新,不使用回调
使用RGB565格式, 减少内存使用的同时加快绘制图片的速度
窗口可以屏蔽按键消息,这样就可以悬浮在其他窗口上方而不影响其他窗口的操作
2019.12.24
多个Paint消息合并为一个消息, 减少不必要的绘制次数
新增窗口置顶功能, 修复一些小bug
新增menu窗口类, 用于显示条目
实现设置,快捷工具列表,日历
2019.12.25
修改消息框UI, 修改时间设置UI
消息框添加询问功能
2019.12.26
新增在矩形框类显示字符的函数
修改双缓冲机制,消除多窗口显示时的闪烁
窗口编程时不用考虑闪烁问题
完成伞训页面
实现以透明度显示图片,实现图片数字的显示
2019.12.27
从已销毁的队列中获取数据返回失败
删除窗口时如果有未绘制的标记会清除绘制标记
解决给已销毁的窗口发绘制消息导致窗口不更新的bug
下载数据暂存到ram中, 数据传输完成后由用户选择是否存入flash
又解决了一次删除此项及以后文件功能会造成剩余文件损坏的bug? ? ?
新增外部数据发送到窗口程序的函数
2019.12.30
可以支持多种大小的字体
实现秒表功能
完成蓝牙设置界面
文件管理器可以查看文件信息
2019.12.31
小工具菜单加入图标
实现倒计时功能
实现闹钟API, 界面写了一部分
2020.1.2
完成闹钟设置界面,闹钟时间到时会弹出闹钟时间到的弹框
弹出选择框添加边框
实现闹钟
实现截图功能,在非阻塞界面长按销毁键截图
2020.1.3
把界面改为透明显示,完成指南针窗口
各个小工具界面加入图标
把图片显示窗口改为非阻塞窗口
可以设置背景图片
使用ARM的傅里叶变换函数
2020.1.4
实现2维傅里叶变换
2020.1.5
实现avi格式视频的播放, 只能播放宽度等于屏幕的视频
2020.1.6
新增屏蔽按键和触摸的函数
从非窗口界面返回到窗口界面不会出现误动作
串口按键驱动中可以判断按键松开事件
解决按键不能发送按键按下消息的bug, 新增按键松开的消息
移植了MP3解码库, 只需要实现DAC音频输出
2020.1.7
解决删除前面的定时器, 后面的定时器不执行的bug
可以设置主题背景
可以设置高中低亮度
解决闹钟界面在闹钟数不足3个时按上键显示异常的bug
解决置顶窗口在移除置顶后仍然执行置顶绘制的bug
解决秒表偏快的bug
实现DAC驱动
2020.2.22
这个版本是游戏模拟器
取消置顶显示的状态栏
设置主题时取消删除状态栏的操作
提示框改为1/4屏幕大小
修改设置页面的菜单名称
默认背景为图片 3.pic
2020.22.23
解决fildeer窗口在无效区外绘制字符的bug
photo窗口可以设置当前显示图像为背景
可以复制外置flash中的文件到sd卡
超过60000微妙的定时器时间最小分辨率由500微秒改为100微秒
解决了视频播放速度过快的bug
2020.2.24
优化usb文件传输, 必须是类型0x01才创建updata类
状态显示使用12号字体
屏幕亮度设置改为字体大小设置
win新增获取字符矩形尺寸的函数
消息框尺寸改为根据显示内容自动调节
2020.2.25
解决sysfile窗口在无效区外绘制字符的bug
sysfile和filder窗口使用透明选中条
popup窗口透明化
窗口可以通过多线程的方式后台执行操作
实现提示窗口,在操作执行时显示提示,操作完成之后退出
jpg和gif解码时加入图片解码提示
文件复制和系统文件删除时加入提示
使用信号量来保护FLASH的访问, 可以在多线程情况下访问FLASH
消息框透明化
解决主题设置页面标题为亮度的bug
2020.2.26
解决父窗口重绘时子窗口重绘位置偏移的bug
解决animation和photo窗口在父窗口不在屏幕原点时绘制不居中的bug
发现在窗口坐标为负时会出现绘制位置偏移的情况
解决popup窗口x方向显示位置计算错误的bug
使用回调的方式绘制字符,方便添加新字体
根据不同的字体区分取字模函数
背景图片不存在时使用黑色背景
保存接收文件时加入提示并且加入保存成功提示
新增像素为20的字体
优化文件接收逻辑, 解决在一次传输失败之后后面的传输都会失败的bug
只能传输小于6M的文件
文件接收可以选择保存到系统还是SD卡
解决 WIN_GetTxtRectSize 函数在优化等级O2及以上时产生总线错误的bug
2020.2.27
JLINK 虚拟串口引脚定义
Pin 5 = J-Link-Tx (out), Pin 17 = J-Link-Rx (in)
加入bootloader程序, 前128k为bootload区
添加 Bootloader ,升级程序成功, 升级文件为 user.app
关机选项加入重启到BootLoader
sysfile 可以选择app文件进行升级
可以区分程序是通过调试接口下载还是通过iap升级得来的
通过IAP升级的程序可以追加程序名称等附加信息
2020.2.28
photo可以显示灰度, 解决了显示点阵图片时图片内存已经被释放的bug
添加位图生成算法
photo可以生成带扩散仿色的位图
popup窗口使用半透明背景
取消对 LED_Init(); Usart_Config(); SDRAM_Init(); sFLASH_Init();
的调用, 因为在BootLoader已经初始化过, 节省启动时间
使用ADC1, 通道5, PA5引脚绘制频谱, 频谱出现显示一段时间后会卡住, 然后会自动恢复的bug
猜测可能是fft的数值超出太多
2020.2.29
发现一个显示位图时屏幕疯狂闪烁的现象,
2020.3.1
bootloader加入按键检测, 在开机时按住键盘不放可进入BootLoader
在BootLoader可以选择要升级的程序
2020.3.4
不带PWM调光, 短按背光键可以关屏幕背光
2020.3.22
加入外置flash驱动, 使用pa4, pa5, pa7, pc3
解决触屏失效的bug
编译出两个程序, 一个使用外接flash, 一个使用板载flash
2020.4.10
增加swd下载功能,可以成功加载icp程序, 下载数据, 但是有概率失败, swd底层通信不可靠
2020.4.20
解决一些mp3解码中可能造成硬件错误的bug
编写音乐播放窗口,成功播放
2020.4.21
实现音乐播放和nes游戏的音频输出, 有部分音乐无法播放, 原因不明
使用json来掉电保存设置信息
系统文件管理使用动态的弹出选择框
flash文件删除从擦除所有剩余空间改为擦除占用空间
实现闹铃设置,闹钟时间到时会自动播放闹铃
可以在文件管理器中设置背景图片和闹铃,关机保存
bootloader只显示.app文件
2020.4.25
更换当前最新的fats, 还是没有解决sd卡文件乱码的问题, 换一张sd卡不会乱码, 猜测是有坏道,
fats没有处理坏道的机制
2020.5.15
根据mp3参数动态设置音频buff大小, 解决播放部分MP3音频不正常的bug
音乐播放器界面可以显示歌曲名等信息,增加进度条显示
mp3解码加入重入判断
闹钟最多显示5分钟
2020.5.16
新增音乐播放器,可后台播放
文件管理器单文件夹条目增加到1000条
2020.5.17
扫描歌曲的时候过滤掉不支持的曲目,列表保存到文件,下次启动不需要重新扫描
解决上一曲还是播放这一曲的bug, 解决手动播放列表最后一项不成功的bug
2020.5.23
新增随机播放
解决部分mp3标题和艺术家乱码的问题
2020.5.27
移植FreeType字体库, 可以加载内存中的字体文件
解决读取SD卡地址偏移大于4GB的数据出错的bug
实现FreeType字体显示, 但是效果不太好
2020.5.28
添加字形缓冲区,提高界面中字体重绘速度
编写freetype的文件IO接口, 使frtype可以直接打开flash或SD卡中的文件
FATFS使用互斥信号量
2020.5.29
解决ftfile.c和mywin_font.c中内存泄漏的问题
一种存储字形数据的文件结构:
本文件分为索引区和数据区--索引区在文件头部并占用固定的数据空间,数据区在应用过程中逐渐增加
----索引区----
索引采用升序排列,索引中附带字形的尺寸和字符编码以及数据偏移地址,每个字符的索引大小是相同的
这里规定一种结构来代表索引
struct {
u32 index;//index=(type<<16)|word;
u32 offset;
} _word_index;
由于索引采用升序排列,可以采用二分法来加快字形搜索速度
由于在一般情况下单片机使用的字符是很有限的,在具体应用中,需要预估一个最大的字符使用情况
假设在某应用中使用不超过1000个字符
则索引区占用的空间为 sizeof(_word_index)*1000
应用程序中每新增一种字形则需要重新排列索引区,始终保持升序排列的特性
----数据区----
定义存储字形数据的结构
struct {
u32 size;//本结构的数据尺寸
u8 data[0];//字形数据,这个数组的大小根据字形变化
} _word_data;
每新增一个字形数据, 则在文件末尾追加一个_word_data结构,
并且在索引区新增一个索引, 其中_word_index.offset成员的值设置为新增结构的偏移
最后文件还需要一个文件头结构
struct {
u32 size;//文件大小
u32 font_num_max;//字形数量上限
u32 font_num;//本文件种记录的字形数量
}
解决部分mp3文件头数据太大导致无法播放的bug
2020.5.31
修改dac初始化函数, 可以在播放音乐的时候打开游戏
2020.6.1
添加触屏短按消息
添加home,menu,filder,popup,等界面的触屏支持
大部分界面添加触屏支持
music_player界面新增播放模式设置
2020.6.2
menu支持滑动, 闹钟, photo改为在长按位置弹出选项框
修改mp3ivd1编码为ascii, 解决部分文件标题乱码的问题
button解决滑动误触的问题
修改滴答定时器周期为一秒
解决删除子窗口不完全导致的内存泄露的bug
内部内存改为130KB
新增分配内部内存的接口mymalloc_fast
解决视频3播放解码太慢的问题, 原因是分配了外部内存
主循环里输出内存占用率
运行指示灯改为按下屏幕时亮
json设置文件添加有效性校验
2020.6.3
添加自动熄屏,把字体设置改为熄屏时间设置
内存管理使用了ccm内存, 字形缓冲池使用了ccm内存, 增加数目到200
music列表触屏滑动支持
完善拼音输入法不完全匹配时也输出候选字
解决SD卡写数据出错的bug
新增按文件名校验mp3是否支持, 扫描时又可以多扫描几个mp3文件
2020.8.17
更改lcd驱动, 实现窗口在屏幕外的情况
新增窗口拖动
解决窗口在右边时拖动会刷新左边的bug
使用dma进行纯色和565图像绘制, 窗口拖动还是有点卡
2020.8.18
编写窗口滑动实现代码,测试实现效果
编写附带滑动动画的窗口框架, 还有一些bug
2020.8.19
实现窗口滑动框架,home和menu窗口继承了touch窗口, 实现滑动进入和退出
使用dma2d绘制纯色矩形和透明度矩形
moveout 和movein 消息改为发送触摸产生的坐标
mywin窗口管理器在消息处理完了再退出
实现带下拉功能的状态栏,在界面越多的情况下越卡顿,需优化
2020.8.20
修改窗口重绘逻辑,在子窗口覆盖父窗口的情况下只重绘子窗口,减少不必要的绘制
还存在多个窗口共同覆盖父窗口的情况,这种情况比较复杂,暂时没有处理
更改函数 WIN_SetInvalidRectWhenTop 的触发逻辑,改为窗口未被遮挡时刷新
绝大多数窗口都改为继承 WIN_TouchWinStruct 类
2020.8.21
内存分配函数临界区由禁止全局中断改为禁止任务调度
mywin新增设置子窗口按键和触屏响应的函数
添加蓝牙聊天窗口,使用蓝牙模块可以进行通信
蓝牙聊天应用搜索从机时可以显示蓝牙名称
蓝牙模块复位命令加入倒计时, 复位100次依然失败则返回失败
2020.8.24
添加png格式图片解码库
字体显示改为灰度显示,增加了一定的内存占用
修改gif调用, 解码一个gif图片之后可以解码另一个gif而不用删除第一个
编写图像缩放函数
diskio.c文件中sd卡读取时查看buff指针是否4字节对齐, 如不对其则进行对齐处理,
没搞懂png读取文件为什么会出现未对齐的情况
2020.8.25
touch窗口添加惯性滑动
picmenu窗口使用gif动画, 点击动画进入子页面
菜单使用新的滑动菜单
解决picmenu窗口内存泄漏的bug
2020.8.26
外部可拆卸的驱动模块单独建立一个文件夹,并且只在需要他的时候初始化
添加QMC1310模块, 添加9轴校准界面, 添加椭球拟合算法
2020.8.27
添加卡尔曼滤波算法
做了抗锯齿画直线,效果不太好
2020.8.28
实现抗锯齿画线
地磁传感器合入指南针应用
2020.9.2
主程序对外开放符号表, 应用程序调用符号表来访问系统api
加载bin文件到内存中并正常执行, 由于bin文件不附带段信息, 暂时不支持非const类型全局变量的访问
2020.9.3
可以运行axf文件, 支持RW, ZI段的数据
2020.9.4
解决menu窗口滑动惯性的刷新动画覆盖其子窗口的bug
在内存中使用中断向量表,这样便于修改中断函数
找到运行在app中的回调函数无法正常使用RW类型变量的原因并解决
2020.9.5
app文件分为抢占, 线程和驻留3个类型
photo支持png图片解码并显示
win绘制背景可以绘制argb8888格式的图片
usb传输的文件根据文件格式创建文件夹并保存
tool菜单改为动态扫描sd卡中的程序文件
选择消息框支持触摸
2020.9.6
接收文件和闹钟的对话框父窗口改为基础窗口
2020.9.7
修改MPU设置以支持在SDRAM中运行程序
修改close app 在打开新app时调用
拆分app工程和系统工程, 每个APP单独占用一个工程
2020.9.8
添加设置字体的api
提供app运行管理
使用状态栏的下拉框进行app运行管理
编写一些APP应用
2020.9.14
解决不能修改字体的bug, 字体向上平移type/10个像素
2020.9.15
解决部分字符显示位置异常的bug
freetype修改为使用外部内存
大于5kb的内存申请使用外部内存
2020.10.16
mywin更新到2020.10.14日
图片解码只使用外置内存
2020.10.17
重写MENU界面
2020.10.19
滚动条加入惯性
2020.10.20
文件管理器实现触屏操作
文字和图片缓冲区新增项目时在已有项目的中间位置插入
2020.10.22
调用一次3角函数, 用于在app中使用
解决中文字体和英文字体对齐不一致的bug
2020.11.5
解决使用pic图片作为背景时只显示一半的bug
mywin新增运行在窗口API, 用于在非窗口线程提供窗口运行需求
2020.11.6
解决使用pic图片作为背景时过一段时间只显示一半的bug, 原因是申请的内存大小不够
解决photo窗口显示pic图片时一开始会有一部分不显示的bug, 原因是没有更新图像数据指针
实现开关机界面,锁屏界面
2020.11.15
编写nrf24l01驱动, 可以发送和接收任意长度的数据, 实现同步调频功能
可以记录发送数据包个数以及失败个数
实现无线传送文件,可以传输文件到其他开发板
2020.11.16
nrf24l01 增加去初始化函数, 关闭时关闭中断, 失能nrf
working窗口根据显示字符尺寸自动调整窗口大小
2020.11.23
音频输出支持调节音量
2020.11.25
解决nrf发送数据函数实际发送数据返回值异常的bug
2020.12.18
解决菜单反复滚动会卡住的bug
字体缓冲使用外置内存, rtthread使用ccm内存
2021.1.16
添加api声明
2021.2.20
freetype改为移植到makefile的源码, 工作正常,
添加freetype内存使用情况统计, 通过修改ftstdlib.h宏来决定是否使用
添加Lua解析器 实现time函数
编写 c语言stdlib 库的接口函数,便于移植的开源软件使用
2021.2.21
解决Lua调用c语言自定义库出错的问题
完善libc.c文件
2021.2.22
解决绘制纯色背景颜色异常的bug
实现输出打印信息到屏幕, 文件管理器中可以直接运行lua脚本
2021.5.8
添加蓝牙模块 at_host代码, 修改其使用事件来驱动, 解决发送读没有转义和命令字段没有转义的问题
修改与蓝牙模块的通信逻辑, 把轮询的驱动模型改为事件驱动, 节约CPU, 作为从机与蓝牙调试助手通信成功
2021.5.10
远程函数调用测试成功
ble模块串口改为串口2, at_host发送缓冲区改为522, ble_demo接收缓冲区改为512
解决远程调用函数返回值丢失的bug?
usart1 puts函数添加互斥量, 然而并不能解决printf函数输出插队的问题...
设置菜单添加显示调试信息项
2021.5.11
最近窗口在 WIN_Working 函数开始时设置为当前窗口,结束时设置为之前的窗口
2021.5.12
ble_demo 添加回调函数设置,连接状态回调,接收到数据回调以及用户中断回调
lcd 标准输出设备支持打印中文
Lua 脚本编码改为gb2312时可以在屏幕上输出中文, 但有点问题
2021.5.21
串口1添加接收功能, tools中接收文件通过宏来选择使用nrf还是串口
文件管理器屏蔽超出范围的滑动
2021.6.10
添加sqlite3,但没有写适配接口
2025.9.21
usb插入没有反应的原因是没有关闭vbus检测
枚举不成功的原因是没有修改厂商id
2025.10.10
使用互斥量保护串口打印存在的问题,低优先级获取锁,切换到高优先级,
导致高优先级无法获取锁,形成死等。
具体原因应该是在调度器启动之前使用了互斥量api, 然而这个api只能在线程中调用