STM32自制GUI小游戏--Apple的学习笔记

一,前言

要过年了,我就玩会吧~GUI之前学习过了guilite源码,那么我就调用它的API自己做个小游戏玩玩。步骤是先在vs上完成调试,然后移植到stm32F4开发板上。主要也想多用用新买的并口LCD屏,因为之前的ili9325并口8bit连camera不能用DMA,我又买了个ili9431并口16bit屏幕(连接camera方便DMA直接采集赋值),因为8bit的话,16bit需要先传高bit再传低bit给LCD。而camera DMA是4个字节按低地址到高地址写到LCD,这样就导致8bit LCD无法通过DMA连接camera了。跑题了,我顺便述说我的新屏幕,哈哈~先看下游戏效果图吧!其实可以理解为一个超级玛丽小游戏。


image.png

二,vs调试遇到的问题

我是官网的example基础上,借用它图及走路,跳跃的逻辑代码,然后改成了按键可以触发的小游戏。想想容易,结果过程中也遇到了些坎坷。
1. 文字更新,无法消去之前的。--已解决
rect在surface创建的时候范围需要填写正确。然后通过调用s_surface->show_layer来显示level0层的内容,进行恢复。
2. 如何设计重玩。--已解决
做了些标志位,然后重玩需要调用reset函数来重置位置。
3. 背景图片移动不知道用哪个API或设计方案。--未解决
现在也没找到解决方法,guilite库好像不支持图片移动的API。它的移动物体要么是重绘,要么就是要预先准备好一张张图片。这个我去之后有机会再看看其它GUI源码是如何做的。否则三维立方体确实是有移动的,但是这个移动只是几条线段的移动。我这个背景图片数组很大,难道也要通过矩阵变换数学公式来实现移动?

三,STM32GUI调试问题

1. cpp函数中按钮按下后的回调函数总是找不到。导致编译不通过。
原因是UIcode.cpp是cpp文件不是c文件,所以c要引用c++的函数需要添加extern c。主要是忘记了它是cpp文件,哈哈~
2. 代码一运行就进入了while循环。
因为有2层,在底层set_surface的时候到calloc出现assert error进入while死循环。查了下我设置了2403202=150K,而STM32F407虽然有192Kram,但是其中64K不是连续的。于是我缩小了尺寸,挑选要更新的界面区域。大概为48K吧,但是依然calloc出错?
于是思考了下calloc申请堆空间出错只有一种原因,就是内存不过,但是现在48K为什么会不够呢!想起来HEAP段的大小可以设置的,估计设置小了,查了map文件果然,HEAP默认只分配了512字节。

    HEAP                                     0x20001b58   Section      512  startup_stm32f40_41xxx.o(HEAP)
    Heap_Mem                                 0x20001b58   Data         512  startup_stm32f40_41xxx.o(HEAP)
    STACK                                    0x20001d58   Section     1024  startup_stm32f40_41xxx.o(STACK)
    Stack_Mem                                0x20001d58   Data        1024  startup_stm32f40_41xxx.o(STACK)

原因找到了,那么就修改Heap段配置大小,修改startup_stm32f40_41xxx.s
Heap_Size EQU 0x00000200改成Heap_Size EQU 0x00010000
3. object走路速度快。
也就是刷屏变换比vs2017工程中快,所以把delay50变100。这样调试下速度差不多。
4. 跳一下后,key数值每次加2
防抖动从5改成10.估计我一次按下抖动了2次,所以认为按下2次。修改为10后,按一次key,跳一次数值加1。一切如预期。

四,总结

Every thing under control. What a wonderful day!
游戏使用方法

  1. 开机
  2. 按一下key0,游戏开始,主人公出现。
  3. 在游戏过程中按key0,主人公跳起,必要碰到4个障碍物。
  4. 跳过4个障碍物后,显示win结束游戏,按一次key0又可以重来。
  5. 过程中若遇到障碍物,则显示GO。游戏结束,按一次key0又可以重来。

游戏录制效果

2.gif

需要源码可以联系我~

你可能感兴趣的:(STM32自制GUI小游戏--Apple的学习笔记)