現在、LPC15xxでRTOSライブラリを用いてコーディングしようとしています。
ところが、LPC15xxで mbed offical のRTOSライブラリをインポートしコーディングすると以下のコードにLPC15xxが定義されていない為ビルドエラーになります。その為、以下の変更を行ってみました。
RTX_Conf_CM.c
RTX_CM_lib.h
RTX_Conf_CM.c を以下に変更
52行目
- # if defined(TARGET_LPC1768)|| defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
+ # if defined(TARGET_LPC1768)|| defined(TARGET_LPC1549) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
65行目
- # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
+ # if defined(TARGET_LPC1768) || defined(TARGET_LPC1549) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
115行目
- # elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC)
+ # elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549)
また、RTX_CM_lib.hは
- #if defined(TARGET_LPC1768)
- define INITIAL_SP (0x10008000UL)
+ #if defined(TARGET_LPC1768) || defined(TARGET_LPC1549)
- define INITIAL_SP (0x10008000UL)
でビルドは通りました。
ところが、LPC15XX.pdf (15/99P)と LPC1769_68_67_66_65_64_63.pdf (23/88P)で比較すると
LPC17xxではRTOSで使う場所を
LPC15xxでは
RTOSのLPC17xxは #define INITIAL_SP (0x10008000UL) ですので、MemMapとLPC17xx.h(mbedライブラリ>TARGET_LPC1768>LPC17xx.h)ではRTOSのcallocをこの領域からとっており、とっている場所はReserveの#define LPC_RAM_BASE (0x10000000UL) です。
同じく、LPC15xx.hも確認しましたがそちらではこの領域については定義しておらずGPIOから先しか記載がありませんでした。
この比較だと、どのReserve領域でLPC15xxのRTOS用のメモリマップするのが正解なんでしょうか?
RTOSはメモリ自体はboxで8byteづつとって管理はされているようで、今ところ不具合は出ていませんが・・・
一応、動かしてみたサンプルコードを添付しておきます。
#include "mbed.h"
#include "rtos.h"
DigitalOut led1(P0_29);
DigitalOut led2(P0_9);
Serial pc(USBTX, USBRX); tx, rx
int a;
void led2_thread(void const *argument) {
while (true) {
led2 = !led2;
a = a + 1;
Thread::wait(100);
}
}
int main() {
Thread thread(led2_thread);
while (true) {
pc.printf("\033[2J");
pc.printf("\033[1;1H");
pc.printf("%d",a);
led1 = !led1;
Thread::wait(200);
}
}
現在、LPC15xxでRTOSライブラリを用いてコーディングしようとしています。 ところが、LPC15xxで mbed offical のRTOSライブラリをインポートしコーディングすると以下のコードにLPC15xxが定義されていない為ビルドエラーになります。その為、以下の変更を行ってみました。
RTX_Conf_CM.c RTX_CM_lib.h
RTX_Conf_CM.c を以下に変更 52行目
- # if defined(TARGET_LPC1768)|| defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
+ # if defined(TARGET_LPC1768)|| defined(TARGET_LPC1549) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
65行目
- # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
+ # if defined(TARGET_LPC1768) || defined(TARGET_LPC1549) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC1347) || defined(TARGET_K64F) \
115行目
- # elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC)
+ # elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549)
また、RTX_CM_lib.hは - #if defined(TARGET_LPC1768)
+ #if defined(TARGET_LPC1768) || defined(TARGET_LPC1549)
でビルドは通りました。 ところが、LPC15XX.pdf (15/99P)と LPC1769_68_67_66_65_64_63.pdf (23/88P)で比較すると
LPC17xxではRTOSで使う場所を
LPC15xxでは
RTOSのLPC17xxは #define INITIAL_SP (0x10008000UL) ですので、MemMapとLPC17xx.h(mbedライブラリ>TARGET_LPC1768>LPC17xx.h)ではRTOSのcallocをこの領域からとっており、とっている場所はReserveの#define LPC_RAM_BASE (0x10000000UL) です。
同じく、LPC15xx.hも確認しましたがそちらではこの領域については定義しておらずGPIOから先しか記載がありませんでした。
この比較だと、どのReserve領域でLPC15xxのRTOS用のメモリマップするのが正解なんでしょうか?
RTOSはメモリ自体はboxで8byteづつとって管理はされているようで、今ところ不具合は出ていませんが・・・
一応、動かしてみたサンプルコードを添付しておきます。
#include "mbed.h"
#include "rtos.h"
DigitalOut led1(P0_29);
DigitalOut led2(P0_9);
Serial pc(USBTX, USBRX); tx, rx
int a;
void led2_thread(void const *argument) {
while (true) {
led2 = !led2;
a = a + 1;
Thread::wait(100);
}
}
int main() {
Thread thread(led2_thread);
while (true) {
pc.printf("\033[2J");
pc.printf("\033[1;1H");
pc.printf("%d",a);
led1 = !led1;
Thread::wait(200); }
}