STM32F1에 1인칭 3D 슈팅 게임을 저장하는 방법은 무엇입니까?

8379 단어
3D 1인칭 슈팅 게임을 언급할 때마다 고성능 그래픽 카드와 몇 GB 또는 수십 GB의 하드 드라이브 저장 공간을 생각하는 것이 자연스럽습니다. 256KB 플래시만 있는 STM32F103RC와 같은 작은 보드?



USB 케이블로 보드를 컴퓨터에 연결하면 STM32의 플래시인 100KB가 조금 넘는 USB 스틱을 볼 수 있습니다.



그러면 USB 스틱에 90KB 게임이 있음을 알 수 있습니다.



STM32에서 1인칭 슈팅 게임을 활성화하려면 더블 클릭하십시오.



전체 데모 프리젠테이션 비디오는 RT-Thread YouTube Channel을 참조하십시오.

1. RT 스레드 실행



RT-Thread는 Github에 코드를 저장하는 오픈 소스 임베디드 실시간 운영 체제이며 자세한 문서를 제공합니다. 다음은 이 프로젝트에 필요한 도구를 요약한 것입니다.
  • 힘내 배쉬
  • 케일
  • STM32
  • RT-Thread source code
  • RT-Thread Env Tool

  • 2. 온칩 플래시 파일 시스템



    플래시를 stm32에 파일 시스템으로 마운트하고 CubeMX에서 USB를 활성화합니다.



    USB를 켠 후 외부 크리스탈이 클록 구성에서 보드의 크리스탈과 일치하고 USB 클록이 48MHz인지 확인한 다음 클릭하여 코드를 생성합니다. 시계를 수정했으므로 board/CubeMX_Config/Src/main.c 내부의 void SystemClock_Config(void) 함수를 board/board.c에 복사하고 교체해야 합니다.

    그런 다음 BSP 아래의 보드 디렉토리에서 Kconfig 파일을 수정하십시오.

    1config BSP_USING_ON_CHIP_FLASH
    2    bool "Enable on-chip FLASH"
    3    default n 
    4
    5config BSP_USING_USBD_FS
    6    bool "Enable USBD as USB device"
    7    select RT_USING_USB_DEVICE
    8    default n
    


    이렇게 하면 BSP 디렉토리에서 ConEmu Here를 마우스 오른쪽 버튼으로 클릭하여 구성 인터페이스( Env tutorial )를 보고 다음 옵션을 선택할 수 있습니다.

    1. 하드웨어 드라이버 구성 --> 온칩 플래시 활성화



    2. RT 스레드 구성 요소 --> 장치 드라이버 --> MTD Nor Flash 장치 드라이버 사용



    3. RT-Thread 온라인 패키지 --> 시스템 패키지에서 fal 및 Littlefs 선택


    4. RT-Thread 구성 요소 --> 장치 가상 파일 시스템



    구성을 저장하고 종료하고 Env 내부에 명령을 입력하여 Keil 프로젝트를 자동으로 생성합니다.

    1pkgs --update
    2scons --target=mdk5 -s
    


    먼저 플래시를 구성해야 합니다. STM32F103RC에는 총 256KB가 있으며 마지막 128KB를 파일 시스템으로 사용할 수 있으므로 새 fal_cfg.h를 생성해 보겠습니다.

    1extern const struct fal_flash_dev stm32_onchip_flash;
    2
    3#define FAL_FLASH_DEV_TABLE                                          \
    4{                                                                    \
    5    &stm32_onchip_flash,                                           \
    6}
    7
    8#define FAL_PART_TABLE                                                          \
    9{                                                                               \
    10    {FAL_PART_MAGIC_WROD,       "app", "onchip_flash",         0,   128*1024, 0}, \
    11    {FAL_PART_MAGIC_WROD,      "flash0", "onchip_flash",   128*1024,  128*1024, 0}, \
    12}
    


    그런 다음 main.c 마운트 파일 시스템을 수정합니다.

    1#include <rtthread.h>
    2#include <rtdevice.h>
    3#include <board.h>
    4#include <fal.h>
    5#include <dfs_posix.h>
    6
    7/* defined the LED0 pin: PC13 */
    8#define LED0_PIN    GET_PIN(C, 13)
    9
    10#define FS_PARTITION_NAME  "flash0"
    11
    12int main(void)
    13{
    14    int count = 1;
    15    /* set LED0 pin mode to output */
    16    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    17
    18    fal_init();
    19
    20#ifdef RT_USB_DEVICE_MSTORAGE
    21    struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME);
    22#else
    23    struct rt_device *flash_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME);
    24#endif
    25
    26    if (flash_dev == NULL)
    27    {
    28        rt_kprintf("Can't create a block device on '%s' partition.\n", FS_PARTITION_NAME);
    29    }
    30    else
    31    {
    32        rt_kprintf("Create a block device on the %s partition of flash successful.\n", FS_PARTITION_NAME);
    33    }
    34
    35    while (count++)
    36    {
    37#ifndef RT_USB_DEVICE_MSTORAGE
    38        if(rt_device_find(FS_PARTITION_NAME) != RT_NULL)
    39        {
    40            dfs_mkfs("lfs", FS_PARTITION_NAME);
    41
    42            if (dfs_mount(FS_PARTITION_NAME, "/", "lfs", 0, 0) == RT_EOK)
    43            {
    44                rt_kprintf("sd card mount to '/'\n");
    45                break;
    46            }
    47            else
    48            {
    49                rt_kprintf("sd card mount to '/' failed!\n");
    50            }
    51        }
    52#endif
    53        rt_pin_write(LED0_PIN, PIN_HIGH);
    54        rt_thread_mdelay(500);
    55        rt_pin_write(LED0_PIN, PIN_LOW);
    56        rt_thread_mdelay(500);
    57    }
    58
    59    return RT_EOK;
    60}
    


    프로젝트를 컴파일하고 보드에 다운로드하고 msh에 fal 프로브를 입력하면 파티션 테이블이 표시됩니다.



    ls, cat, mkdir, cd와 같이 Linux에서 일반적으로 사용되는 명령이 모두 지원되므로 stm32에 온칩 플래시를 파일 시스템으로 마운트하고 다음 단계는 USB 스틱으로 인식하는 것입니다.

    3. 온칩 플래시를 U 스틱으로 마운트



    마찬가지로 환경 구성에서 옵션을 선택합니다.

    1. 하드웨어 드라이버 구성 --> 온칩 주변 장치 드라이버


    2. RT-Thread 구성 요소 --> 장치 드라이버 --> USB 사용





    구성을 저장하면 프로젝트 파일이 Env에 생성됩니다.

    1scons --target=mdk5 -s
    


    보드로 컴파일 및 다운로드하고 stm32f103과 같이 USB를 컴퓨터에 연결합니다. USB 핀은 PA11 및 PA12입니다. 컴퓨터가 새 USB 스틱을 인식한 것을 볼 수 있습니다. 처음 사용할 때 포맷해야 할 수도 있습니다.



    결국 게임을 복사해서 STM32의 온칩 플래시에 올려놓기만 하면 된다.

    RT 스레드 연락처 정보:

    Website | Github | | Facebook |

    좋은 웹페이지 즐겨찾기