diff --git a/car_fmw/Makefile b/car_fmw/Makefile index b9c45ff7ccc..d390659b0b2 100644 --- a/car_fmw/Makefile +++ b/car_fmw/Makefile @@ -30,6 +30,7 @@ LLINK=llvm-link-3.6 KTFLAGS=-I $(KOTSTD_DIR)/include --arm LLINK_FLAGS=-S ASMFLAGS=-g -mthumb +LLFLAGS=-O0 DEFINES=-DUSE_STM32_DISCOVERY=1 -DUSE_STDPERIPH_DRIVER=1 -DSTM32F4XX=1 -DHSE_VALUE=8000000 CFLAGS=-g -nostdlib -ffreestanding -O0 \ diff --git a/car_fmw/src/echo.kt b/car_fmw/src/echo.kt index 2de83474f8f..7cea2dacc45 100644 --- a/car_fmw/src/echo.kt +++ b/car_fmw/src/echo.kt @@ -15,16 +15,15 @@ fun echoProto() { while (true) { val route = readRoute() + blink() go(route) - blink() wait(PROGRAM_DURATION) } } fun readRoute(): RouteRequest { - val size = receive_int() - val buffer = ByteArray(size) + val buffer = receiveByteArray() val stream = CodedInputStream(buffer) val result = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)).parseFrom(stream).build() diff --git a/car_fmw/src/main.kt b/car_fmw/src/main.kt index 50df2442f84..ff30de5b00b 100644 --- a/car_fmw/src/main.kt +++ b/car_fmw/src/main.kt @@ -2,7 +2,19 @@ val PROGRAM_DURATION: Int = 1000 +val ROTATE_TIME = 500 +val STABILIZATION_TIME = 100 + +fun rotateLeftHack() { + engine_turn_left() + wait(ROTATE_TIME) + engine_forward() + wait(STABILIZATION_TIME) + engine_backward() + wait(STABILIZATION_TIME) +} + fun main() { init() - echoUsb() + echoProto() } diff --git a/car_fmw/src/rcControl.kt b/car_fmw/src/rcControl.kt index e69de29bb2d..8e9cc326606 100644 --- a/car_fmw/src/rcControl.kt +++ b/car_fmw/src/rcControl.kt @@ -0,0 +1,3 @@ + +fun rcControl() { +} \ No newline at end of file diff --git a/car_hw/src/communication.c b/car_hw/src/communication.c index 59dba53f893..368029b7e1f 100644 --- a/car_hw/src/communication.c +++ b/car_hw/src/communication.c @@ -14,12 +14,10 @@ void clear_buffer() void send_int(int n) { - int i = 0; - char *buffer = (char *) &n; - - for (; i < sizeof(int); ++i) { - VCP_put_char(buffer[i]); - } + VCP_put_char(n >> 24); + VCP_put_char(n >> 16); + VCP_put_char(n >> 8); + VCP_put_char(n); } void send_buffer(int size, int pointer) @@ -35,15 +33,19 @@ void send_buffer(int size, int pointer) int receive_int() { - int i = 0; - char buffer[sizeof(int)]; + int result = 0; + uint8_t byte = 0; - while (i < 4) { - while (!VCP_get_char(&buffer[i])); - i++; - } + while (!VCP_get_char(&byte)); + result += (byte << 24); + while (!VCP_get_char(&byte)); + result += (byte << 16); + while (!VCP_get_char(&byte)); + result += (byte << 8); + while (!VCP_get_char(&byte)); + result += byte; - return *((int*) buffer); + return result; } void receive_buffer(int size, int pointer) @@ -54,6 +56,4 @@ void receive_buffer(int size, int pointer) for (; i < size; ++i) { while(!VCP_get_char(&buffer[i])); } - - return buffer; } diff --git a/kotstd/include/ByteArray.kt b/kotstd/include/ByteArray.kt index c746a236677..b8845f3c30a 100644 --- a/kotstd/include/ByteArray.kt +++ b/kotstd/include/ByteArray.kt @@ -13,6 +13,7 @@ class ByteArray(var size: Int) { init { this.data = malloc_array(kotlinclib_byte_size() * this.size) var index = 0 + while (index < this.size) { set(index, 0) index = index + 1 diff --git a/kotstd/lib/arm/memory.ll b/kotstd/lib/arm/memory.ll index b42b69641a3..d6a6bb4a451 100644 --- a/kotstd/lib/arm/memory.ll +++ b/kotstd/lib/arm/memory.ll @@ -6,7 +6,7 @@ target triple = "thumbv7m-none--eabi" @static_area_ptr = global i32 0, align 4 @dynamic_area_ptr = global i32 0, align 4 -@static_area = common global [1000 x i8] zeroinitializer, align 1 +@static_area = common global [30000 x i8] zeroinitializer, align 1 @dynamic_area = common global [1000 x i8] zeroinitializer, align 1 ; Function Attrs: nounwind @@ -33,7 +33,7 @@ define weak i8* @malloc_static(i32 %size) #0 { ;