Microbit용 CMSIS-RTOS 구축

하고 싶은 일


qemu에서 마이크로비트를 이동해서 구축한 CMSIS-RTOS입니다.

컨디션

  • microbit Ver 1.5
  • arm-none-eabi-gcc
  • $ arm-none-eabi-gcc --version
    arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
    Copyright (C) 2017 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
  • qemu
  • $ qemu-system-arm --version
    QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.8)
    Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
    

    코드


    다음 2개를 활용하면 구축이 가능합니다.
  • CMSIS_5
  • nrfx
  • 위 코드를 활용해 구축할 수 있지만 추가_start 이후 처리도 가능하다.
    mdk/gcc_startup_nrf51.S210 줄당의 아래 부분.
    /* Call _start function provided by libraries.
     * If those libraries are not accessible, define __START as your entry point.
     */
    #ifndef __START
    #define __START _start
    #endif
        bl __START
    
    _start 이후 처리된 코드는 newliblibgloss/arm/crt0.S에 있다.

    newlib 구축


    newlib도 구축됐다.
    이 원본은 arm gcc 안에 포함되어 있다
    원본 코드 집합을 다운로드하고 구축 스크립트를 보십시오
    다음 옵션은 configure,make입니다.
    각 옵션의 뜻은 여기 Docs에 나와있어요.이다.
    # build-toolchain.sh 380行目あたり
        saveenvvar CFLAGS_FOR_TARGET '-g -Os -ffunction-sections -fdata-sections'
        rm -rf $BUILDDIR_NATIVE/newlib-nano && mkdir -p $BUILDDIR_NATIVE/newlib-nano
        pushd $BUILDDIR_NATIVE/newlib-nano
    
        $SRCDIR/$NEWLIB_NANO/configure  \
            $NEWLIB_CONFIG_OPTS \
            --target=$TARGET \
            --prefix=$BUILDDIR_NATIVE/target-libs \
            --disable-newlib-supplied-syscalls    \
            --enable-newlib-reent-check-verify    \
            --enable-newlib-reent-small           \
            --enable-newlib-retargetable-locking  \
            --disable-newlib-fvwrite-in-streamio  \
            --disable-newlib-fseek-optimization   \
            --disable-newlib-wide-orient          \
            --enable-newlib-nano-malloc           \
            --disable-newlib-unbuf-stream-opt     \
            --enable-lite-exit                    \
            --enable-newlib-global-atexit         \
            --enable-newlib-nano-formatted-io     \
            --disable-nls
    
        make -j$JOBS
        make install
    

    GDB


    Visual Studio Code를 자주 사용하고 있으며 디버깅 설정에 대해 살펴보겠습니다.
    launch.다음 내용의 json을 준비했습니다.
    요점은 설정"miDebuggerPath": "arm-none-eabi-gdb", "miDebuggerServerAddress": "localhost:1234",이다.그 다음은 거의 기본 설정입니다.
    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "microbit debug",
                "type": "cppdbg",
                "request":"launch",
                "program": "${workspaceFolder}/build/main.elf",
                
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "arm-none-eabi-gdb",
                "miDebuggerServerAddress": "localhost:1234",
                
                "setupCommands": [
                    {
                        "description": "Enable gdb reformatting",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                        
                    }
                ]
            }
    }
    

    qemu


    다음에 qemu를 시작하면 Visual Studil Code에서 디버깅을 수행합니다.
    디버거(arm-none-eabi-gdb)가 시작됩니다.
    $ qemu-system-arm -M microbit -device loader,file=main.hex -s -S
    

    총결산


    다음은 부팅 후 LED가 깜박이기 전의 환경을 요약한 것이다.
    https://github.com/SaitoYutaka/CMSIS-RTOS-microbit

    좋은 웹페이지 즐겨찾기