美文网首页BB-black开发板[Linux arm-v8]
STM32自制GUI小游戏--Apple的学习笔记

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

作者: applecai | 来源:发表于2021-02-04 19:41 被阅读0次

    一,前言

    要过年了,我就玩会吧~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的学习笔记

        本文链接:https://www.haomeiwen.com/subject/aefitltx.html