This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.

Dependencies:   mbed

For details, refer to the following.

http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436

Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.

Committer:
tk_takateku
Date:
Wed Feb 15 01:03:35 2017 +0000
Revision:
0:33feccbba3ff
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tk_takateku 0:33feccbba3ff 1 #include "mbed.h"
tk_takateku 0:33feccbba3ff 2
tk_takateku 0:33feccbba3ff 3 #include "mrubyc/hal/hal.h"
tk_takateku 0:33feccbba3ff 4 #include "mrubyc/mrubyc.h"
tk_takateku 0:33feccbba3ff 5
tk_takateku 0:33feccbba3ff 6 DigitalIn mybutton(USER_BUTTON);
tk_takateku 0:33feccbba3ff 7 DigitalOut myled(LED1);
tk_takateku 0:33feccbba3ff 8 RawSerial mysci(USBTX, USBRX);
tk_takateku 0:33feccbba3ff 9
tk_takateku 0:33feccbba3ff 10 extern const uint8_t sample1[];
tk_takateku 0:33feccbba3ff 11 extern const uint8_t sample2[];
tk_takateku 0:33feccbba3ff 12
tk_takateku 0:33feccbba3ff 13 int hal_write(int fd, const void *buf, size_t nbytes)
tk_takateku 0:33feccbba3ff 14 {
tk_takateku 0:33feccbba3ff 15 return mysci.write((const uint8_t *)buf, (int)nbytes, NULL, SERIAL_EVENT_TX_COMPLETE);
tk_takateku 0:33feccbba3ff 16 }
tk_takateku 0:33feccbba3ff 17
tk_takateku 0:33feccbba3ff 18 int hal_flush(int fd)
tk_takateku 0:33feccbba3ff 19 {
tk_takateku 0:33feccbba3ff 20 char char1 = 0;
tk_takateku 0:33feccbba3ff 21 while (mysci.readable())
tk_takateku 0:33feccbba3ff 22 {
tk_takateku 0:33feccbba3ff 23 char1 = mysci.getc();
tk_takateku 0:33feccbba3ff 24 }
tk_takateku 0:33feccbba3ff 25 return 0;
tk_takateku 0:33feccbba3ff 26 }
tk_takateku 0:33feccbba3ff 27
tk_takateku 0:33feccbba3ff 28 void hal_delay(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 29 {
tk_takateku 0:33feccbba3ff 30 wait_ms((int)GET_INT_ARG(0));
tk_takateku 0:33feccbba3ff 31 }
tk_takateku 0:33feccbba3ff 32
tk_takateku 0:33feccbba3ff 33 void hal_led(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 34 {
tk_takateku 0:33feccbba3ff 35 myled = (int)GET_INT_ARG(0);
tk_takateku 0:33feccbba3ff 36 }
tk_takateku 0:33feccbba3ff 37
tk_takateku 0:33feccbba3ff 38 void hal_button(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 39 {
tk_takateku 0:33feccbba3ff 40 int sw = mybutton;
tk_takateku 0:33feccbba3ff 41 SET_INT_RETURN(sw);
tk_takateku 0:33feccbba3ff 42 }
tk_takateku 0:33feccbba3ff 43
tk_takateku 0:33feccbba3ff 44 int main() {
tk_takateku 0:33feccbba3ff 45 mysci.baud(115200); // 115Kbps
tk_takateku 0:33feccbba3ff 46 mysci.format(8, Serial::None, 1); // 8bt, none parity, stop bit 1
tk_takateku 0:33feccbba3ff 47 mrbc_init();
tk_takateku 0:33feccbba3ff 48 mrbc_define_method(0, mrbc_class_object, "led1_write", hal_led);
tk_takateku 0:33feccbba3ff 49 mrbc_define_method(0, mrbc_class_object, "delay", hal_delay);
tk_takateku 0:33feccbba3ff 50 mrbc_define_method(0, mrbc_class_object, "sw1_read", hal_button);
tk_takateku 0:33feccbba3ff 51 mrbc_create_task( sample1, 0 );
tk_takateku 0:33feccbba3ff 52 mrbc_create_task( sample2, 0 );
tk_takateku 0:33feccbba3ff 53
tk_takateku 0:33feccbba3ff 54 mrbc_run();
tk_takateku 0:33feccbba3ff 55
tk_takateku 0:33feccbba3ff 56 }
tk_takateku 0:33feccbba3ff 57