一,前言
要過年了,我就玩會吧~GUI之前學(xué)習(xí)過了guilite源碼,那么我就調(diào)用它的API自己做個(gè)小游戲玩玩。步驟是先在vs上完成調(diào)試,然后移植到stm32F4開發(fā)板上。主要也想多用用新買的并口LCD屏,因?yàn)橹暗膇li9325并口8bit連camera不能用DMA,我又買了個(gè)ili9431并口16bit屏幕(連接camera方便DMA直接采集賦值),因?yàn)?bit的話,16bit需要先傳高bit再傳低bit給LCD。而camera DMA是4個(gè)字節(jié)按低地址到高地址寫到LCD,這樣就導(dǎo)致8bit LCD無法通過DMA連接camera了。跑題了,我順便述說我的新屏幕,哈哈~先看下游戲效果圖吧!其實(shí)可以理解為一個(gè)超級瑪麗小游戲。
image.png
二,vs調(diào)試遇到的問題
我是官網(wǎng)的example基礎(chǔ)上,借用它圖及走路,跳躍的邏輯代碼,然后改成了按鍵可以觸發(fā)的小游戲。想想容易,結(jié)果過程中也遇到了些坎坷。
1. 文字更新,無法消去之前的。--已解決
rect在surface創(chuàng)建的時(shí)候范圍需要填寫正確。然后通過調(diào)用s_surface->show_layer
來顯示level0層的內(nèi)容,進(jìn)行恢復(fù)。
2. 如何設(shè)計(jì)重玩。--已解決
做了些標(biāo)志位,然后重玩需要調(diào)用reset函數(shù)來重置位置。
3. 背景圖片移動(dòng)不知道用哪個(gè)API或設(shè)計(jì)方案。--未解決
現(xiàn)在也沒找到解決方法,guilite庫好像不支持圖片移動(dòng)的API。它的移動(dòng)物體要么是重繪,要么就是要預(yù)先準(zhǔn)備好一張張圖片。這個(gè)我去之后有機(jī)會再看看其它GUI源碼是如何做的。否則三維立方體確實(shí)是有移動(dòng)的,但是這個(gè)移動(dòng)只是幾條線段的移動(dòng)。我這個(gè)背景圖片數(shù)組很大,難道也要通過矩陣變換數(shù)學(xué)公式來實(shí)現(xiàn)移動(dòng)?
三,STM32GUI調(diào)試問題
1. cpp函數(shù)中按鈕按下后的回調(diào)函數(shù)總是找不到。導(dǎo)致編譯不通過。
原因是UIcode.cpp是cpp文件不是c文件,所以c要引用c++的函數(shù)需要添加extern c。主要是忘記了它是cpp文件,哈哈~
2. 代碼一運(yùn)行就進(jìn)入了while循環(huán)。
因?yàn)橛?層,在底層set_surface的時(shí)候到calloc出現(xiàn)assert error進(jìn)入while死循環(huán)。查了下我設(shè)置了2403202=150K,而STM32F407雖然有192Kram,但是其中64K不是連續(xù)的。于是我縮小了尺寸,挑選要更新的界面區(qū)域。大概為48K吧,但是依然calloc出錯(cuò)?
于是思考了下calloc申請堆空間出錯(cuò)只有一種原因,就是內(nèi)存不過,但是現(xiàn)在48K為什么會不夠呢!想起來HEAP段的大小可以設(shè)置的,估計(jì)設(shè)置小了,查了map文件果然,HEAP默認(rèn)只分配了512字節(jié)。
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.sHeap_Size EQU 0x00000200
改成Heap_Size EQU 0x00010000
3. object走路速度快。
也就是刷屏變換比vs2017工程中快,所以把delay50變100。這樣調(diào)試下速度差不多。
4. 跳一下后,key數(shù)值每次加2
防抖動(dòng)從5改成10.估計(jì)我一次按下抖動(dòng)了2次,所以認(rèn)為按下2次。修改為10后,按一次key,跳一次數(shù)值加1。一切如預(yù)期。
四,總結(jié)
Every thing under control. What a wonderful day!
游戲使用方法
開機(jī)
按一下key0,游戲開始,主人公出現(xiàn)。
在游戲過程中按key0,主人公跳起,必要碰到4個(gè)障礙物。
跳過4個(gè)障礙物后,顯示win結(jié)束游戲,按一次key0又可以重來。
過程中若遇到障礙物,則顯示GO。游戲結(jié)束,按一次key0又可以重來。
游戲錄制效果
2.gif
上一篇:玩玩littlevgl移植到stm32
下一篇:qemu stm32特制版源碼編譯及調(diào)試
- 熱門資源推薦
- 熱門放大器推薦
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- MIC47050 典型應(yīng)用:500mA ULDO,低輸入低輸出電壓
- LT3970IMS-5 12V 降壓轉(zhuǎn)換器的典型應(yīng)用
- Tzduino
- LT3091HR 并聯(lián)線性穩(wěn)壓器的典型應(yīng)用
- AM2F-1203SH30Z 3.3V 2瓦DC-DC轉(zhuǎn)換器的典型應(yīng)用
- AD8602WARZ-RL 符合 PC100 標(biāo)準(zhǔn)的線路輸出放大器的典型應(yīng)用
- 面向MC24XS4系列的Freedom硬件
- 使用 ON Semiconductor 的 LV4904V 的參考設(shè)計(jì)
- LTC3870 的典型應(yīng)用 - 具有數(shù)字電源系統(tǒng)管理功能的用于 LTC3880/LTC3883 的多相降壓從控制器
- 使用 Analog Devices 的LT1934的參考設(shè)計(jì)
- 方案分享 | ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測試方案 方案分享 | ARXML 規(guī)則下 ECU 總線通訊與
- 車載SerDes產(chǎn)業(yè)起飛!國產(chǎn)新品密集炸場
- 出貨量激增1.34倍! 5G車規(guī)模組成標(biāo)配,三大廠商新品同臺競技
- 6月新能源市場:零跑創(chuàng)新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規(guī)MCU的LED矩陣大燈應(yīng)用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計(jì)概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺硅驗(yàn)證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時(shí)間
- BOE(京東方)聯(lián)合榮耀打造榮耀Magic V5 以領(lǐng)先LTPO技術(shù)打造行業(yè)新標(biāo)桿
- 華為ADS 4發(fā)布:多傳感器融合,提升自動(dòng)駕駛安全性
- 外國調(diào)研機(jī)構(gòu):三星Galaxy S10系列單季賣1600萬臺
- 華為Mate 30背部渲染圖曝光,又一新設(shè)計(jì)
- 6萬億韓元!韓加大半導(dǎo)體材料研發(fā),應(yīng)對日本對韓出口管制
- 安靠中國區(qū)總經(jīng)理周曉陽加盟初創(chuàng)公司廣州芯聚能半導(dǎo)體
- 100%讓利!激勵(lì)開發(fā)者,OPPO DEVELOPER DAY上海站震撼來襲
- 新iPad Air推出:首發(fā)A14芯片Touch ID集成到電源鍵
- iOS 14/iPadOS 14/watchOS 7/tvOS 14正式版已發(fā)布
- 新款A(yù)pple Watch發(fā)布后:蘋果下架陶瓷版本的型號
- 新Apple Watch不附贈電源適配器:新iPhone還附贈嗎?
- 羅技推出帶觸控板Folio Touch,適配于新款iPad Air