Embedded Objective-C

19
Embedded Objective-C Shotaro “Fantom” Uchida

description

How to run Objective-C on Bare-metal ARM

Transcript of Embedded Objective-C

Page 1: Embedded Objective-C

Embedded Objective-CShotaro “Fantom” Uchida

Page 2: Embedded Objective-C

Who am I?

• I am Java Enthusiast so far...– USB EHCI stack in Java– TCP/IP in Java– IEEE802.11 in Java– ZigBee in Java– OAuth 2.0 in Java– XModem in Java

• I do everything (Hardware/Software) for Java• 仕事下さい。よろしくお願いします。

But today...

Page 3: Embedded Objective-C

Objective-C

#import "XYZPerson.h" @implementation XYZPerson- (void)sayHello { NSLog(@"Hello, World!");}@end

Page 4: Embedded Objective-C

Arduino

Page 5: Embedded Objective-C

#import "XYZPerson.h"

@implementation XYZPerson

- (void)sayHello {

NSLog(@"Hello, World!");

}

@end

If I could...

Page 6: Embedded Objective-C

Existing Solutions

Language

Bare-Metal C

Arduino Java-like

mbed C++

JavaME JavaME

Tessel JavaScript

Why not Objective-C ???

Page 7: Embedded Objective-C

Is ObjC Proprietary?

Page 8: Embedded Objective-C

How different?

Java

Java

C++ RuntimeJVM

C++

C Runtime

CObjC Runtime

Smalltalk-like

C++ Objective-C

Page 9: Embedded Objective-C

5 Reasons Why Objective-C is the Best

• C++ sucks.• You can use “Pure C” anytime anywhere.• It also means that you can use assembly

anytime.• Powerful object-oriented language, but still

faster than Java.• And C++ sucks.

Page 10: Embedded Objective-C

Disadvantages

• Large memory footprint– Classes are loaded at init array calls.– No “class-loader” system.– Needs to manage all method symbols i.e.

selectors.

• Message lookup

Page 11: Embedded Objective-C

“Big 3” ObjC Runtime

Compiler Modern-ObjC Cons

Apple Clang Yes iOS/OSX only

libobjc GCC, Clang No Out-datedNo “Foundation”

GNUStep GCC, Clang Yes (w/ Clang) Out-datedHuge

Page 12: Embedded Objective-C

Another newer runtime “ObjFW”

• Lightweight– < 1MB

• Portable– Multi-platform includes Apple devices– Works with PSP, Wii, and NintendoDS !

• Modern-ObjC• Clang supported

– -fobjc-runtime=objfw– Don't stop the support of ObjFW!! Plz!!

• Github– https://github.com/Midar/objfw

Page 13: Embedded Objective-C

Requirements to run ObjFW

• Still, you need 1MB+ RAM– External RAM, typically– Bootloader

• 1MB+ Flash• “Fast enough” processor

Page 14: Embedded Objective-C

Silabs EFM32 Wonder Gecko

• Cortex-M4F@48MHz• External Bus Interface

– Up to 4x256MB– Support code execution via I/D bus

• Ultra low power• SDK with big memory!

– 4MB PSRAM– 16MB Nor Flash

Page 15: Embedded Objective-C

It works!!

• Ubuntu 14.04• Eclipse Kepler

– With debugging!!

• Clang/LLVM 3.5 (trunk)– Some nice major updates for ARM ;)

• ObjFW 0.8-dev• Need some workaround...

– Read my blog: http://xmaker.mx/archives/14

Page 16: Embedded Objective-C
Page 17: Embedded Objective-C
Page 18: Embedded Objective-C

What's Next?

• Threading support– CMSIS-RTOS (RTX)– Free RTOS

• Socket support– lwIP

• File support• Hardware APIs

Page 19: Embedded Objective-C

ObjCPowered

ObjArduino

Relese Date: When It's Done