Archive for the MQX Category

Note: MQX411 with FRDM-K64F Starting guide

Posted in Cortex- M4, MCU, MQX with tags , on 2015 年 02 月 06 日 by Kun-Yi
  1. download your toolchain from https://launchpad.net/gcc-arm-embedded, currently support gcc 4.8 2014q1update(MQX tested on this version, see MQX411 release note ), but we support others version gcc 4.8 2014q3update and gcc 4.9 2014q4
  2.  git clone https://github.com/KunYi/MQX411.git
  3. modify GCC_REV and TOOLCHAIN_ROOTDIR in MQX411/build/comm/global.mak or MQX411/envsetup.sh to your toolchain version & location
  4. run ‘source envsetup.sh’ or  ‘.  envsetup.sh’
  5. cd MQX411/build/frdmk64f/make
  6. run ./build_gcc_arm.sh then waiting until finish, the step for compiling kernel code
  7. cd MQX411/demo/web_hvac/build/make/web_hvac_frdmk64f
  8. run ./build_gcc_arm.sh then waiting until finish, the step for compiling application & link kernel
  9. cd ./gcc_arm/intflash_release
  10. elf2bin web_havc_frdmk64f  # we will get web_havc_frdmk64.bin
  11. cp2med web_havc_frdmk64 # will download the  binary file to FRDM-K64F

Note: update MQX 4.1.1 build system for gcc_arm compiler to v4.8 2014q3update and v4.9 2014q4

Posted in MQX with tags , , on 2015 年 02 月 04 日 by Kun-Yi

因為目前都是在 Linux 作業 所以下面情況只在 Ubuntu 12.04 LTS 測試 先解開 Freescale 提供 MQX source tarball 目前是 4.1.1, 可以從 Release Note 知道是建議用gcc-arm-none-eabi-4.8-2014q1update 的版本, 但是我看 GCC ARM Embedded 4.8 已經有了 2014q3 update 就一時興起了測試新版本compiler 的想法 研究了一下 gcc_arm的 build system 發現還是用 make , 而且有專屬 gcc_arm.mak 從中知道他是 hardcode 指定為include & link gcc 4.8.3 相關的檔案 這時只要換掉 4.8.3 到想要的版本應該就可以了(前題是gcc_arm 對應的路徑沒變的話), 因此我用了下面的指令去 replace 所有的 gcc_arm.mak

find . -name gcc_arm\\.mak -exec sed -i ‘s/4\.8\.3/$(GCC_REV)/’ {} \;

這樣就可以透過 在 build/comm/global.mak 去定義 GCC_REV 的版本切換 gcc 的版本了, 目前測試過 2014q1 & 2014q3 切換都可以正常的編譯整個 MQX & example 這個 patch(4.8.4)/patch(4.9.3) 目前在github 上了

update: MQX 今天可以用 gcc 4.9.3 了, 而且看來運作正常, web_hvac_frdmk64f 可跑!

Note: MQX kernel options

Posted in MQX with tags , on 2015 年 02 月 03 日 by Kun-Yi

MQX kernel 有一些參數 可以設定

底下內容可以從 MQX411ROOT/mqx/source/include/mqx_cnfg.h  找到, 不過就像下面提到的 正確的作法是 Clone BSP 然後在自己的BSP內 透過user_config.h 去把 要設定的參數overridden 這樣如果有多塊不同SKU/BOARD 才好維護整個 source code tree.

MQX_USE_XXX 通常是 MQX OS component 的 enable/disable 選項

譬如會使用到 SEMAPHORES 的功能 的話, 就必須 MQX_USE_SEMAPHORES 設為 1 這樣kernel 才會有支援 SEMAPHORES

* This file contains the default configuration definitions for configuring
* the various optional features of MQX. Individual config. Defines can be
* overridden in the “user_config.h" file.
*
* By default, MQX is configured as follows:
* MQX_ALLOW_TYPED_MEMORY 1
* MQX_COMPONENT_DESTRUCTION 1
* MQX_DEFAULT_TIME_SLICE_IN_TICKS 0
* MQX_EXIT_ENABLED 1
* MQX_EXTRA_TASK_STACK_ENABLE 1
* MQX_HAS_TIME_SLICE 1
* MQX_CHECK_ERRORS 1
* MQX_CHECK_MEMORY_ALLOCATION_ERRORS 1
* MQX_CHECK_VALIDITY 1
* MQX_INCLUDE_FLOATING_POINT_IO 0
* MQX_IS_MULTI_PROCESSOR 1
* MQX_KERNEL_LOGGING 1
* MQX_LWLOG_TIME_STAMP_IN_TICKS 1
* MQX_MEMORY_FREE_LIST_SORTED 1
* MQX_MONITOR_STACK 1
* MQX_MUTEX_HAS_POLLING 1
* MQX_PROFILING_ENABLE 0
* MQX_ROM_VECTORS 0
* MQX_RUN_TIME_ERR_CHECK_ENABLE 0
* MQX_TASK_CREATION_BLOCKS 1
* MQX_TASK_DESTRUCTION 1
* MQX_TIMER_USES_TICKS_ONLY 0
* MQX_USE_32BIT_MESSAGE_QIDS 0
* MQX_USE_32BIT_TYPES 0
* MQX_USE_EVENTS 1
* MQX_USE_IDLE_TASK 1
* MQX_USE_INLINE_MACROS 1
* MQX_USE_IPC 1
* MQX_USE_LOGS 1
* MQX_USE_LWEVENTS 1
* MQX_USE_LWLOGS 1
* MQX_USE_LWMEM 1
* MQX_USE_LWMEM_ALLOCATOR 0
* MQX_USE_LWMSGQ 1
* MQX_USE_LWTIMER 1
* MQX_USE_MESSAGES 1
* MQX_USE_MUTEXES 1
* MQX_USE_NAME 1
* MQX_USE_PARTITIONS 1
* MQX_USE_SEMAPHORES 1
* MQX_USE_SW_WATCHDOGS 1
* MQX_USE_TIMER 1
* MQX_VERIFY_KERNEL_DATA 1
* MQX_ENABLE_USER_MODE 0
* MQX_ENABLE_LOW_POWER 0