亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

[NES]從模板工程到NES模擬的實現(xiàn) | 技術(shù)集結(jié)

RT-Thread官方賬號 ? 2025-08-23 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄


摘要視頻


前置準(zhǔn)備


軟件包設(shè)置


CubeMx配置


工程主體


感慨

2 前置準(zhǔn)備


nes游戲就選用最經(jīng)典的SuperMary,先創(chuàng)建一個基于06_demo_nes_simulator示例的示例工程,找到其中g(shù)ame目錄下的SuperMary.nes文件,將其復(fù)制到SD卡上、

3 軟件包設(shè)置


新建一個基于RT-Spark的模板工程,進(jìn)入RT setting,進(jìn)入詳細(xì)界面,選中硬件,將以下設(shè)置添加(選中)


<板載驅(qū)動設(shè)備>

1.SRAM

2.onboard LCD(ST7789)—>TIM14_CH1

3.File system—>SDCARD


<芯片驅(qū)動設(shè)備>

1.PWM14 channel1

2.SPI BUS—>RW007 onboard


添加完成后,ctrl+s保存設(shè)置

4 CubeMx配置


找到board—>CubeMx_Config目錄下的CubeMx_Config.ioc文件,雙擊進(jìn)入STM32CubeMx界面

配置同LCD配置

Timers—>TIM14—>PWM Generation CH1

Connectivity—>FSMC—>LCD1

Memory type

LCD Register Select

Data

LCD Interface

A18

8 bits

設(shè)置完成后,點(diǎn)擊右上角的GENERATE CODE,回到RT-Studio界面

5 工程主體


先構(gòu)建項目,此時,CubeMx_Config目錄下會多出Drivers,MDK-ARM兩個文件夾,控制臺會出現(xiàn)很多報錯,將這兩個文件夾和Src目錄下的main.c文件刪除,右鍵工程文件—>同步Scons配置至項目

同步完成后,將示例工程application目錄下的main.c的代碼復(fù)制到模板工程相同目錄的main.c文件中進(jìn)行替換,nes文件夾同理復(fù)制到模板工程中,再次構(gòu)建項目,如果出現(xiàn)報錯,再次進(jìn)行Scons同步后重復(fù)操作

此時將工程下載到開發(fā)板中,然后打開串口工具(!!記得插上SD卡,不然就會出現(xiàn)如下報錯?。。?/strong>

bf3ac090-7fc5-11f0-9080-92fbcf53809c.png

插上SD卡后,串口工具輸出正常

bf4eaa9c-7fc5-11f0-9080-92fbcf53809c.png

輸入命令nes_start sdcard/SuperMary.nes

然后就能看到,又報錯了…

bf669e2c-7fc5-11f0-9080-92fbcf53809c.png

這里的報錯提示出現(xiàn)了斷言失敗,那么回到RT-Studio分析代碼,搜索small_mem,定位相關(guān)代碼段

bf813098-7fc5-11f0-9080-92fbcf53809c.png

仔細(xì)分析一遍并沒有發(fā)現(xiàn)代碼有什么問題,那么問題在哪,為什么會導(dǎo)致斷言出現(xiàn)?

查閱相關(guān)資料發(fā)現(xiàn),RT_ASSERT的啟用依賴于debug.h頭文件,而在正式發(fā)布產(chǎn)品時,通常會禁用調(diào)試代碼功能(即不定義RT_DEBUG宏)從而減少代碼體積并提高代碼效率,但是這里又沒有用到debug相關(guān)的語句

再次檢查代碼發(fā)現(xiàn)并沒有明顯問題,使用BC輔助分析

bf94cfea-7fc5-11f0-9080-92fbcf53809c.png

對比可以看到模板工程和示例工程的不同點(diǎn),重點(diǎn)關(guān)注各種config文件還有scons文件,這些都與配置有關(guān)

bfa5ef32-7fc5-11f0-9080-92fbcf53809c.png

在rtconfig.h文件中,可以看到,模板工程在這里定義了DEBUG的宏,將這兩行注釋掉,同步scons配置,再次構(gòu)建項目,下載,測試輸入指令LCD是否成功運(yùn)行游戲

bfb8a726-7fc5-11f0-9080-92fbcf53809c.png

可以看到,這次并沒有報錯,說明上述操作正常,但是發(fā)現(xiàn)LCD上依舊是白屏,并沒有按想象中那樣運(yùn)行游戲,這就很令人疑惑了

雖然沒有報錯,但LCD也沒有正常工作,那問題出在哪了?LCD沒有運(yùn)行游戲,但是正常亮起,說明LCD配置方面沒有問題,而在這個項目中,RT-Spark開發(fā)板上只用到了 LCD,SD插口,按鍵,很顯然按鍵和當(dāng)前問題聯(lián)系不大,那么問題最有可能出在了SD相關(guān)的東西上

順著上面的思路,可以推測,也許是SD插口相關(guān)配置沒有正常工作,導(dǎo)致SD插口沒有讀取到SD卡上的數(shù)據(jù),也有可能是LCD沒有接收到SD卡傳入的數(shù)據(jù),重新回到代碼分析尋找思路

在application的main.c文件中,可以找到nes_start函數(shù)的定義,正好在輸入指令時用到了nes_start的指令,而通過輸入的指令可以看出,nes_start的作用應(yīng)該是讀取SD卡上相關(guān)數(shù)據(jù)

bfc31c38-7fc5-11f0-9080-92fbcf53809c.png

那么可以大膽推測nes_start和我們想要解決的問題有關(guān)聯(lián),分析nes_start函數(shù),可以知道這個函數(shù)的工作就是讀取nes文件地址,下載nes文件,然后判斷下載的nes文件是否為NULL,這時根據(jù)這段代碼,又可以發(fā)現(xiàn)些許蹊蹺

if(!nes){ return-1; }

這段代碼在判斷nes是否為空,為空則提前退出,那么,又多了一種可能,就是SD的讀取和LCD的接收都沒有問題,而是提前退出導(dǎo)致nes文件沒有運(yùn)行,往這個if中加入一段打印日志的代碼

rt_kprintf("create default!\n");

再次構(gòu)建項目,下載,然后輸入指令

bfd9e206-7fc5-11f0-9080-92fbcf53809c.png

那么問題就顯而易見了,程序運(yùn)行到這時提前退出導(dǎo)致LCD沒有顯示游戲畫面,但是,什么原因?qū)е铝顺绦虻奶崆巴顺?,回到BC將模板工程和示例工程的main.c進(jìn)行對比

可是并沒有發(fā)現(xiàn)差異,而且發(fā)現(xiàn)application文件夾并沒有差異,排除法縮小范圍,setting,rt-thread明顯無關(guān),application,libraries,和Debug沒有差異,都進(jìn)行排除,再排除一些明顯無關(guān)的文件

bfe58606-7fc5-11f0-9080-92fbcf53809c.png

那么只剩下了這些部分,rtconfig_preinc.h文件內(nèi)容沒有差異,Kconfig文件也幾乎沒有差異,排除

打開board目錄,CubeMx_Config,.ignore_format.yml,link.icf,board.h,board.c無明顯差異也可以進(jìn)行排除

bff329be-7fc5-11f0-9080-92fbcf53809c.png

那么只剩下了這幾個文件,先分析之前分析過的rtconfig.h

c003da66-7fc5-11f0-9080-92fbcf53809c.png

這幾段包含了和TIMER有關(guān)的宏定義,考慮到LCD雖然沒有正常運(yùn)行游戲,但是能正常亮起,先進(jìn)行排除

c0156056-7fc5-11f0-9080-92fbcf53809c.pngc025e07a-7fc5-11f0-9080-92fbcf53809c.pngc033ce92-7fc5-11f0-9080-92fbcf53809c.png

前兩張雖然看不懂,但是明顯和LCD以及nes關(guān)聯(lián)不大,最后一張和網(wǎng)絡(luò)協(xié)議相關(guān),直接排除,那么就排除了rtconfig.h

再來分析其他文件,.config,cconfig.h文件中的內(nèi)容同理rtconfig.h,排除,那么只剩下了和link相關(guān)的兩個文件

c03fb928-7fc5-11f0-9080-92fbcf53809c.png

這些和開發(fā)板的linker有關(guān),想到之前的一種可能,SD插口與LCD連接配置出問題導(dǎo)致LCD接收不到SD插口發(fā)送的數(shù)據(jù),從而程序運(yùn)行時提前退出,考慮到這種可能,分析代碼發(fā)現(xiàn)

c04d0196-7fc5-11f0-9080-92fbcf53809c.pngc055e662-7fc5-11f0-9080-92fbcf53809c.png

這幾段代碼都和nes相關(guān),將它們復(fù)制過去,同步scons,構(gòu)建項目,下載,輸入指令,查看運(yùn)行結(jié)果

c05e9a64-7fc5-11f0-9080-92fbcf53809c.pngc066fc04-7fc5-11f0-9080-92fbcf53809c.jpg

游戲正常運(yùn)行,串口工具處也沒有報錯,說明操作正確,問題解決,nes模擬成功實現(xiàn)!

6 感概


過程有那么一點(diǎn)點(diǎn)曲折,但是最終成功分析出了問題所在并解決,從模板工程到實現(xiàn)示例工程的過程相當(dāng)于從無到有的創(chuàng)造,滿滿的成就感,仿佛離b站大佬更近了一步()

示例工程雖然很方便,但是只授之予魚而非漁,從模板工程開始,一步一步的創(chuàng)造,雖然做出了以后很有成就感,但還是希望相關(guān)教程能多出一點(diǎn)(一步步推真的很不容易)

此外,在查看日志的時候還發(fā)現(xiàn)不管是示例工程還是模板工程

c0738a50-7fc5-11f0-9080-92fbcf53809c.png

并沒有發(fā)現(xiàn)這一段命令打印的路徑日志,也沒有分析出是什么原因,有知道的大佬可以解答一下

(BC真的很好用)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5178

    文章

    20067

    瀏覽量

    326771
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    581

    瀏覽量

    67393
  • NES
    NES
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7559
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何安裝模擬器玩nes小游戲-基于米爾瑞芯微RK3576開發(fā)板

    本篇源自:優(yōu)秀創(chuàng)作者 小手涼涼本文將介紹基于米爾電子MYD-LR3576開發(fā)板(米爾基于瑞芯微 RK3576開發(fā)板)的安裝模擬器玩nes小游戲方案測試。 核心板系統(tǒng) 操作系統(tǒng)鏡像文件說明
    發(fā)表于 02-08 12:10

    賺人氣,用STM32F407做個NES游戲機(jī)玩玩

    的,感謝一下,不過不爽的是原子的NES是跑在UCOS上的,這個被我移植裸機(jī)上的,自由度高一點(diǎn),代碼還有BUG,最近忙沒優(yōu)化,可以公開大家一起搞搞,不過工程都是分開的,沒合到一起,看看大家感興趣不,再傳。`
    發(fā)表于 11-18 11:29

    STM32F1做的NES模擬器 支持聲音及全屏游戲

    最近一直想做個NES模擬器玩玩,在網(wǎng)上一頓狂搜各種資料,視頻,移值過很多各版本的模擬器,我感覺效果最好的是原子哥和ye781205網(wǎng)友的程序。移值很簡單這里就不提了。這里說下改進(jìn):支持DAC輸出
    發(fā)表于 01-31 15:07

    NES模式下規(guī)劃精度及測試效率提升分析

    NES是什么? NES系統(tǒng)包括哪些部分?有什么應(yīng)用?
    發(fā)表于 06-02 06:40

    ESP32 NES模擬器教程

    (模擬器),玩上幾把小時候最喜歡玩的游戲,而nes模擬器正是不二之選,通過制作模擬器我們能學(xué)習(xí)軟硬件各方面的知識,可謂是很多程序員走向編程
    發(fā)表于 01-12 08:20

    游戲精靈NES頂部裝載機(jī)適配器

    描述游戲精靈 NES 頂部裝載機(jī)適配器接口板允許 Game Genie正確連接 NES Top Loader 。提供必要的 1.2
    發(fā)表于 09-08 06:26

    【HD-G2UL-EVM開發(fā)板體驗】掌上游戲機(jī)之三 —— NES游戲模擬器移植

    前言前面我們完成了USB手柄按鍵采集,RTP實時推流H264PC端顯示作為虛擬顯示器。完成了移植NES游戲模擬器的基本要素,這一篇我們開始進(jìn)行真正的移植。過程如下是移植好的代碼git clone
    發(fā)表于 12-22 16:01

    5個步驟,讓你的核桃派玩回當(dāng)年火爆全球NES游戲

    1.準(zhǔn)備好你的nes游戲: nes游戲鏈接:鏈接:百度網(wǎng)盤 請輸入提取碼 提取碼:k6sh 2.安裝nes游戲模擬器: sudo apt-get install nestopia 3
    發(fā)表于 11-22 10:50

    PC專用經(jīng)典NES手柄

    PC專用經(jīng)典NES手柄 在電腦城轉(zhuǎn)轉(zhuǎn),隨便哪個攤位都可以看到各種電腦用手柄,這東西實在是爛大街了,可是今天的新聞不由得讓我頭頂青天了。
    發(fā)表于 03-10 09:28 ?1313次閱讀

    如何使用ESP32和ATtiny861制作NES模擬器游戲控制臺

     NES模擬器不是ESP32唯一有趣的事情。例如。你可以用它構(gòu)建一個微型python控制臺。您需要更改的唯一組件是I2C游戲手柄I2C鍵盤。我認(rèn)為使用ATtiny88控制器制作它并
    的頭像 發(fā)表于 08-27 14:20 ?1.3w次閱讀
    如何使用ESP32和ATtiny861制作<b class='flag-5'>NES</b><b class='flag-5'>模擬</b>器游戲控制臺

    NES盒式外置硬盤的制作

    現(xiàn)在,您可以使用新的NES驅(qū)動器來容納NES仿真器和所有非法的NES rom。
    的頭像 發(fā)表于 10-10 09:48 ?2711次閱讀

    NES更換PSU PCB開源

    電子發(fā)燒友網(wǎng)站提供《NES更換PSU PCB開源.zip》資料免費(fèi)下載
    發(fā)表于 07-21 14:49 ?1次下載
    <b class='flag-5'>NES</b>更換PSU PCB開源

    游戲精靈NES頂部裝載機(jī)適配器

    電子發(fā)燒友網(wǎng)站提供《游戲精靈NES頂部裝載機(jī)適配器.zip》資料免費(fèi)下載
    發(fā)表于 08-17 09:55 ?0次下載
    游戲精靈<b class='flag-5'>到</b><b class='flag-5'>NES</b>頂部裝載機(jī)適配器

    開源!自制NES模擬器,3元MCU也能跑

    器的樂趣——模擬器已集成LuatOS中!1開源NES模擬器簡介本文演示NES模擬器由合宙社群@
    的頭像 發(fā)表于 04-13 11:06 ?5526次閱讀
    開源!自制<b class='flag-5'>NES</b><b class='flag-5'>模擬</b>器,3元MCU也能跑

    超越節(jié)點(diǎn)引擎臨界:華為云 NES 顛覆游戲規(guī)則

    技術(shù)領(lǐng)域,創(chuàng)新是引人注目的產(chǎn)物。華為云 Web3 節(jié)點(diǎn)引擎服務(wù) NES(以下簡稱:華為云 NES)以卓越的技術(shù)實力贏得業(yè)內(nèi)良好口碑。在近期 SUSTAINABLE WEB3 SG 2
    的頭像 發(fā)表于 04-07 17:06 ?1185次閱讀