開發記錄 (A)
Homework
  • 安裝和設定 QEMU
  • 依據指示,將 00-Semihosting, 00-HelloWorld, …, 07-Threads 均實際測試並研讀程式碼
  • 在 github 上 fork mini-arm-os,並修改 07-Threads (不要增加新的目錄!),提供基本的 shell,然後能夠用新建立的 thread 計算 fibonacci 數列
TO DO : 
  • shell 程式碼可參照 rtenv+ 的 main.c,裡頭提供 shell 實做
作業要求 (B)
參考在 FreeRTOS 實做檔案系統的方式,對 mini-arm-os 提出唯讀檔案系統的實做,一樣在 Homework #7 的基礎上改進。
HW 8
參考 : +Romfs
  • -freertos-basic/data/test-romfs : 檔案系統來源Directory
  • -freertos-basic/mk/romfs.mk : 
  • 與如何將/data/test-romfs 變成test-romfs.o 有關,從此看出需要藉由freertos-basic/tool/mkromfs.c,在tools資料夾中有一個mkromfs的工具程式,可以將host端的一個資料夾下的資料壓成一個romfs檔案以供編譯時使用。
  • -freertos-basic/main.ld : 
  • 裡面的
            _sromfs = .;
            *(.romfs*)
            _eromfs = .;
  • mkromfs  生成的檔案會後會由 objcopy 去生成 Obj 檔順便掛上 .romfs 的 symbol  ,然後Linker在Linking的時候會由main.ld這一隻LinkerScript去做資料的排放。
 
 
Study note HW7
00-HelloWorld
reg.h 裡面定義的是 memory map,參閱 STM32F103 規格書:
#define __REG_TYPE    volatile uint32_t
#define __REG        __REG_TYPE *
 
/* RCC Memory Map */
#define RCC        ((__REG_TYPE) 0x40021000)
#define RCC_APB2ENR    ((__REG) (RCC + 0x18))
#define RCC_APB1ENR    ((__REG) (RCC + 0x1C))
 
/* GPIO Memory Map */
#define GPIOA        ((__REG_TYPE) 0x40010800)
#define GPIOA_CRL    ((__REG) (GPIOA + 0x00))
#define GPIOA_CRH    ((__REG) (GPIOA + 0x04))
 
/* USART2 Memory Map */
#define USART2        ((__REG_TYPE) 0x40004400)
#define USART2_SR    ((__REG) (USART2 + 0x00))
#define USART2_DR    ((__REG) (USART2 + 0x04))
#define USART2_CR1    ((__REG) (USART2 + 0x0C))
startup.c 裡會設定 ISR_vectors
#include <stdint.h>