car_hw: cleanup Makefile and lib interfaces
This commit is contained in:
+2
-2
@@ -1,4 +1,4 @@
|
||||
BIN_DIR=$(PWD)/bin
|
||||
BIN_DIR=bin
|
||||
SRC_DIR=src
|
||||
LIB_DIR=$(SRC_DIR)/lib
|
||||
OS_ARCH=linux-arm
|
||||
@@ -65,7 +65,7 @@ $(CAR_OBJ): \
|
||||
$(LD_ALL_DEPS)
|
||||
|
||||
$(BIN_DIR)/$(CAR_OBJ_PREFIX)%.o: $(SRC_DIR)/%.c \
|
||||
$(call dirhs,$(SRC_DIR))
|
||||
$(call dirhs,$(SRC_DIR)/include)
|
||||
$(CC_ALL_DEPS)
|
||||
|
||||
clean:
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#include "car_conn.h"
|
||||
|
||||
#include <usbd_cdc_vcp.h>
|
||||
|
||||
void car_conn_init(void)
|
||||
{
|
||||
VCP_init();
|
||||
car_conn_rcv_buf_clear();
|
||||
}
|
||||
|
||||
void car_conn_rcv_buf_clear(void)
|
||||
{
|
||||
uint8_t tmp_char;
|
||||
while (VCP_get_char(&tmp_char));
|
||||
}
|
||||
|
||||
void car_conn_snd_byte(uint8_t b)
|
||||
{
|
||||
VCP_put_char(b);
|
||||
}
|
||||
|
||||
void car_conn_snd_int(int32_t n)
|
||||
{
|
||||
VCP_put_char(n >> 24);
|
||||
VCP_put_char(n >> 16);
|
||||
VCP_put_char(n >> 8);
|
||||
VCP_put_char(n);
|
||||
}
|
||||
|
||||
void car_conn_snd_buf(uint32_t size, int buf)
|
||||
{
|
||||
size_t i = 0;
|
||||
uint8_t *cbuf = (uint8_t *)buf;
|
||||
|
||||
for (; i < size; ++i)
|
||||
car_conn_snd_byte(cbuf[i]);
|
||||
}
|
||||
|
||||
uint8_t car_conn_rcv_byte(void)
|
||||
{
|
||||
uint8_t byte = 0;
|
||||
while (!VCP_get_char(&byte));
|
||||
return byte;
|
||||
}
|
||||
|
||||
int32_t car_conn_rcv_int(void)
|
||||
{
|
||||
int32_t result = 0;
|
||||
|
||||
result += (car_conn_rcv_byte() << 24);
|
||||
result += (car_conn_rcv_byte() << 16);
|
||||
result += (car_conn_rcv_byte() << 8);
|
||||
result += car_conn_rcv_byte();
|
||||
return result;
|
||||
}
|
||||
|
||||
void car_conn_rcv_buf(uint32_t size, int buf)
|
||||
{
|
||||
uint8_t* cbuf = (uint8_t *)buf;
|
||||
size_t i = 0;
|
||||
|
||||
for (; i < size; ++i)
|
||||
cbuf[i] = car_conn_rcv_byte();
|
||||
}
|
||||
+14
-14
@@ -13,7 +13,7 @@
|
||||
#define CAR_ENGINE_RWHEEL_FWD_PIN GPIO_Pin_6
|
||||
#define CAR_ENGINE_RWHEEL_BKWD_PIN GPIO_Pin_7
|
||||
|
||||
void engine_init(void)
|
||||
void car_engine_init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
RCC_AHB1PeriphClockCmd(CAR_ENGINE_GPIO_PORT_CLOCK, ENABLE);
|
||||
@@ -29,7 +29,7 @@ void engine_init(void)
|
||||
GPIO_Init(CAR_ENGINE_GPIO_PORT, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
void engine_stop(void)
|
||||
void car_engine_stop(void)
|
||||
{
|
||||
GPIO_ResetBits(CAR_ENGINE_GPIO_PORT, 0
|
||||
| CAR_ENGINE_LWHEEL_BKWD_PIN
|
||||
@@ -40,40 +40,40 @@ void engine_stop(void)
|
||||
}
|
||||
|
||||
#ifdef CAR_ENGINE_ENABLE
|
||||
void engine_forward(void)
|
||||
void car_engine_forward(void)
|
||||
{
|
||||
engine_stop();
|
||||
car_engine_stop();
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_ENABLE_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_LWHEEL_FWD_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_RWHEEL_FWD_PIN);
|
||||
}
|
||||
|
||||
void engine_backward(void)
|
||||
void car_engine_backward(void)
|
||||
{
|
||||
engine_stop();
|
||||
car_engine_stop();
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_ENABLE_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_LWHEEL_BKWD_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_RWHEEL_BKWD_PIN);
|
||||
}
|
||||
|
||||
void engine_turn_left(void)
|
||||
void car_engine_turn_left(void)
|
||||
{
|
||||
engine_stop();
|
||||
car_engine_stop();
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_ENABLE_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_LWHEEL_BKWD_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_RWHEEL_FWD_PIN);
|
||||
}
|
||||
|
||||
void engine_turn_right(void)
|
||||
void car_engine_turn_right(void)
|
||||
{
|
||||
engine_stop();
|
||||
car_engine_stop();
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_ENABLE_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_LWHEEL_FWD_PIN);
|
||||
GPIO_SetBits(CAR_ENGINE_GPIO_PORT, CAR_ENGINE_RWHEEL_BKWD_PIN);
|
||||
}
|
||||
#else
|
||||
void engine_forward(void) {}
|
||||
void engine_backward(void) {}
|
||||
void engine_turn_right(void) {}
|
||||
void engine_turn_left(void) {}
|
||||
void car_engine_forward(void) {}
|
||||
void car_engine_backward(void) {}
|
||||
void car_engine_turn_right(void) {}
|
||||
void car_engine_turn_left(void) {}
|
||||
#endif // CAR_ENGINE_ENABLE
|
||||
|
||||
+11
-11
@@ -5,15 +5,15 @@
|
||||
#include "stm32f4_discovery.h"
|
||||
#include "stm32f4xx_conf.h"
|
||||
|
||||
void leds_init(void)
|
||||
void car_leds_init(void)
|
||||
{
|
||||
STM_EVAL_LEDInit(LED_RED);
|
||||
STM_EVAL_LEDInit(LED_ORANGE);
|
||||
STM_EVAL_LEDInit(LED_GREEN);
|
||||
STM_EVAL_LEDInit(LED_BLUE);
|
||||
STM_EVAL_LEDInit(CAR_LED_RED);
|
||||
STM_EVAL_LEDInit(CAR_LED_ORANGE);
|
||||
STM_EVAL_LEDInit(CAR_LED_GREEN);
|
||||
STM_EVAL_LEDInit(CAR_LED_BLUE);
|
||||
}
|
||||
|
||||
void led_set(int led, bool on)
|
||||
void car_led_set(int led, bool on)
|
||||
{
|
||||
if (on)
|
||||
STM_EVAL_LEDOn(led);
|
||||
@@ -21,10 +21,10 @@ void led_set(int led, bool on)
|
||||
STM_EVAL_LEDOff(led);
|
||||
}
|
||||
|
||||
void leds_clear_all(void)
|
||||
void car_leds_clear_all(void)
|
||||
{
|
||||
led_set(LED_GREEN, false);
|
||||
led_set(LED_ORANGE, false);
|
||||
led_set(LED_RED, false);
|
||||
led_set(LED_BLUE, false);
|
||||
car_led_set(CAR_LED_GREEN, false);
|
||||
car_led_set(CAR_LED_ORANGE, false);
|
||||
car_led_set(CAR_LED_RED, false);
|
||||
car_led_set(CAR_LED_BLUE, false);
|
||||
}
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "car_leds.h"
|
||||
#include "car_engine.h"
|
||||
#include "car_prog.h"
|
||||
#include "time.h"
|
||||
|
||||
const uint32_t PROGRAM_DURATION_MS = 3000;
|
||||
|
||||
static void program_stop(void)
|
||||
{
|
||||
wait(PROGRAM_DURATION_MS);
|
||||
}
|
||||
|
||||
static void program_forward(void)
|
||||
{
|
||||
engine_forward();
|
||||
wait(PROGRAM_DURATION_MS);
|
||||
}
|
||||
|
||||
static void program_backward(void)
|
||||
{
|
||||
engine_backward();
|
||||
wait(PROGRAM_DURATION_MS);
|
||||
}
|
||||
|
||||
static void program_rotation_left(void)
|
||||
{
|
||||
engine_turn_left();
|
||||
wait(PROGRAM_DURATION_MS);
|
||||
}
|
||||
|
||||
static void program_rotation_right(void)
|
||||
{
|
||||
engine_turn_right();
|
||||
wait(PROGRAM_DURATION_MS);
|
||||
}
|
||||
|
||||
static void program_arbitraty_route(void)
|
||||
{
|
||||
const int ROUTE_PIECE_DURATION = 6 * PROGRAM_DURATION_MS;
|
||||
engine_forward();
|
||||
wait(ROUTE_PIECE_DURATION);
|
||||
|
||||
engine_backward();
|
||||
wait(ROUTE_PIECE_DURATION);
|
||||
|
||||
engine_forward();
|
||||
wait(ROUTE_PIECE_DURATION / 2);
|
||||
|
||||
engine_turn_right();
|
||||
wait(ROUTE_PIECE_DURATION);
|
||||
|
||||
engine_forward();
|
||||
wait(ROUTE_PIECE_DURATION / 2);
|
||||
|
||||
engine_backward();
|
||||
wait(ROUTE_PIECE_DURATION / 2);
|
||||
|
||||
engine_turn_left();
|
||||
wait(ROUTE_PIECE_DURATION);
|
||||
|
||||
engine_backward();
|
||||
wait(ROUTE_PIECE_DURATION / 2);
|
||||
|
||||
engine_stop();
|
||||
wait(ROUTE_PIECE_DURATION / 2);
|
||||
}
|
||||
|
||||
typedef void (*car_program_code_t)(void);
|
||||
typedef struct car_program_desc {
|
||||
car_program_code_t code;
|
||||
struct {
|
||||
bool green : 1;
|
||||
bool orange : 1;
|
||||
bool red : 1;
|
||||
bool blue : 1;
|
||||
} leds;
|
||||
} car_program_desc_t;
|
||||
|
||||
static car_program_desc_t const PROGRAMS[] = {
|
||||
{ .code = program_stop, .leds = {} },
|
||||
{ .code = program_forward, .leds = { .green = 1 } },
|
||||
{ .code = program_backward, .leds = { .orange = 1 } },
|
||||
{ .code = program_rotation_left, .leds = { .red = 1 } },
|
||||
{ .code = program_rotation_right, .leds = { .blue = 1 } },
|
||||
{ .code = program_arbitraty_route, .leds = { .green = 1, .orange = 1 } }
|
||||
};
|
||||
static const size_t PROGRAMS_CNT = sizeof(PROGRAMS) / sizeof(PROGRAMS[0]);
|
||||
static size_t cur_program_ix;
|
||||
|
||||
static void set_cur_program(size_t program_ix)
|
||||
{
|
||||
cur_program_ix = program_ix;
|
||||
|
||||
leds_clear_all();
|
||||
|
||||
const car_program_desc_t *cpd = &PROGRAMS[cur_program_ix];
|
||||
if (cpd->leds.green)
|
||||
led_set(LED_GREEN, true);
|
||||
if (cpd->leds.orange)
|
||||
led_set(LED_ORANGE, true);
|
||||
if (cpd->leds.red)
|
||||
led_set(LED_RED, true);
|
||||
if (cpd->leds.blue)
|
||||
led_set(LED_BLUE, true);
|
||||
}
|
||||
|
||||
void run_programmed_car(volatile bool *stop)
|
||||
{
|
||||
set_cur_program(0);
|
||||
while(!*stop) {
|
||||
PROGRAMS[cur_program_ix].code();
|
||||
set_cur_program((cur_program_ix + 1) % PROGRAMS_CNT);
|
||||
}
|
||||
leds_clear_all();
|
||||
engine_stop();
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <usbd_cdc_vcp.h>
|
||||
|
||||
#include "car_rc.h"
|
||||
#include "car_leds.h"
|
||||
#include "car_engine.h"
|
||||
|
||||
typedef enum {
|
||||
RC_CAR_CMD_STOP = '0',
|
||||
RC_CAR_CMD_FWD = '1',
|
||||
RC_CAR_CMD_BKWD = '2',
|
||||
RC_CAR_CMD_RIGHT = '3',
|
||||
RC_CAR_CMD_LEFT = '4'
|
||||
} RC_CAR_CMD;
|
||||
|
||||
void send_cmd_result(uint8_t cmd, uint8_t result)
|
||||
{
|
||||
VCP_put_char('(');
|
||||
VCP_put_char(cmd);
|
||||
VCP_put_char(':');
|
||||
VCP_put_char(result);
|
||||
VCP_put_char(')');
|
||||
}
|
||||
|
||||
void run_rc_car(volatile bool *stop)
|
||||
{
|
||||
led_set(LED_GREEN, true);
|
||||
led_set(LED_ORANGE, true);
|
||||
led_set(LED_RED, true);
|
||||
led_set(LED_BLUE, true);
|
||||
engine_stop();
|
||||
|
||||
// Cleanup VCP buffer. This doesn't clean all the garbage.
|
||||
// Some garbage arrives much later then we read here.
|
||||
uint8_t tmp_char;
|
||||
while(VCP_get_char(&tmp_char));
|
||||
|
||||
uint8_t cur_cmd = RC_CAR_CMD_STOP;
|
||||
uint8_t new_cmd = cur_cmd;
|
||||
|
||||
while(true) {
|
||||
while((!*stop) && !VCP_get_char(&new_cmd)) {}
|
||||
if (*stop)
|
||||
break;
|
||||
|
||||
if (cur_cmd == new_cmd) {}
|
||||
else if (new_cmd == RC_CAR_CMD_STOP)
|
||||
engine_stop();
|
||||
else if (new_cmd == RC_CAR_CMD_FWD)
|
||||
engine_forward();
|
||||
else if (new_cmd == RC_CAR_CMD_BKWD)
|
||||
engine_backward();
|
||||
else if (new_cmd == RC_CAR_CMD_RIGHT)
|
||||
engine_turn_right();
|
||||
else if (new_cmd == RC_CAR_CMD_LEFT)
|
||||
engine_turn_left();
|
||||
else {
|
||||
send_cmd_result(new_cmd, '1');
|
||||
continue;
|
||||
}
|
||||
|
||||
send_cmd_result(new_cmd, '0');
|
||||
cur_cmd = new_cmd;
|
||||
}
|
||||
|
||||
leds_clear_all();
|
||||
engine_stop();
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
#include <stm32f4xx.h>
|
||||
|
||||
#include "time.h"
|
||||
#include "car_time.h"
|
||||
|
||||
static volatile uint32_t pending_timer_ticks, ticks_since_boot;
|
||||
|
||||
void time_init(void)
|
||||
void car_time_init(void)
|
||||
{
|
||||
// XXX this is copy pasted and it doesn't provide 1ms periodic
|
||||
// timer interrupt
|
||||
@@ -12,17 +12,17 @@ void time_init(void)
|
||||
while (1){};
|
||||
}
|
||||
|
||||
void wait(volatile uint32_t ms) {
|
||||
void car_time_wait(volatile uint32_t ms) {
|
||||
pending_timer_ticks = ms;
|
||||
while(pending_timer_ticks){};
|
||||
}
|
||||
|
||||
uint32_t get_timestamp(void)
|
||||
uint32_t car_time_get_timestamp(void)
|
||||
{
|
||||
return ticks_since_boot;
|
||||
}
|
||||
|
||||
void timer_irq_handler() {
|
||||
void car_time_irq_handler() {
|
||||
if (pending_timer_ticks)
|
||||
pending_timer_ticks--;
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#include "car_user_btn.h"
|
||||
|
||||
static car_user_btn_handler_t user_btn_handler;
|
||||
|
||||
void car_user_btn_init(car_user_btn_handler_t handler)
|
||||
{
|
||||
user_btn_handler = handler;
|
||||
STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
|
||||
}
|
||||
|
||||
bool car_user_btn_is_pushed(void)
|
||||
{
|
||||
return STM_EVAL_PBGetState(BUTTON_USER) == Bit_SET;
|
||||
}
|
||||
|
||||
void EXTI0_IRQHandler(void)
|
||||
{
|
||||
if (user_btn_handler)
|
||||
user_btn_handler();
|
||||
EXTI_ClearITPendingBit(USER_BUTTON_EXTI_LINE);
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
#include "communication.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <usbd_cdc_vcp.h>
|
||||
|
||||
#include "memory.h"
|
||||
|
||||
void clear_buffer()
|
||||
{
|
||||
uint8_t tmp_char;
|
||||
while (VCP_get_char(&tmp_char));
|
||||
}
|
||||
|
||||
void send_int(int n)
|
||||
{
|
||||
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)
|
||||
{
|
||||
int i = 0;
|
||||
char *buffer = (char *) pointer;
|
||||
|
||||
send_int(size);
|
||||
for (; i < size; ++i) {
|
||||
VCP_put_char(buffer[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int receive_int()
|
||||
{
|
||||
int result = 0;
|
||||
uint8_t byte = 0;
|
||||
|
||||
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 result;
|
||||
}
|
||||
|
||||
void receive_buffer(int size, int pointer)
|
||||
{
|
||||
char* buffer = (char*) pointer;
|
||||
int i = 0;
|
||||
|
||||
for (; i < size; ++i) {
|
||||
while(!VCP_get_char(&buffer[i]));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void car_conn_init(void);
|
||||
void car_conn_rcv_buf_clear(void);
|
||||
|
||||
void car_conn_snd_byte(uint8_t b);
|
||||
void car_conn_snd_int(int32_t n);
|
||||
void car_conn_snd_buf(uint32_t size, /*void */int buf);
|
||||
|
||||
uint8_t car_conn_rcv_byte(void);
|
||||
int32_t car_conn_rcv_int(void);
|
||||
void car_conn_rcv_buf(uint32_t size, /*void **/int buf);
|
||||
@@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
void engine_init(void);
|
||||
void engine_stop(void);
|
||||
void engine_forward(void);
|
||||
void engine_backward(void);
|
||||
void engine_turn_left(void);
|
||||
void engine_turn_right(void);
|
||||
void car_engine_init(void);
|
||||
void car_engine_stop(void);
|
||||
void car_engine_forward(void);
|
||||
void car_engine_backward(void);
|
||||
void car_engine_turn_left(void);
|
||||
void car_engine_turn_right(void);
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LED_GREEN = LED4,
|
||||
LED_ORANGE = LED3,
|
||||
LED_RED = LED5,
|
||||
LED_BLUE = LED6
|
||||
} led_t;
|
||||
CAR_LED_GREEN = LED4,
|
||||
CAR_LED_ORANGE = LED3,
|
||||
CAR_LED_RED = LED5,
|
||||
CAR_LED_BLUE = LED6
|
||||
} car_led_t;
|
||||
|
||||
void leds_init(void);
|
||||
void leds_clear_all(void);
|
||||
void led_set(int led, bool on);
|
||||
void car_leds_init(void);
|
||||
void car_leds_clear_all(void);
|
||||
void car_led_set(int led, bool on);
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
void run_programmed_car(volatile bool *stop);
|
||||
@@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
void run_rc_car(volatile bool *stop);
|
||||
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void car_time_init(void);
|
||||
void car_time_wait(volatile uint32_t ms);
|
||||
uint32_t car_time_get_timestamp(void);
|
||||
/*
|
||||
* Called from systick handler
|
||||
*/
|
||||
void car_time_irq_handler();
|
||||
@@ -3,24 +3,9 @@
|
||||
#include <stdbool.h>
|
||||
#include "stm32f4_discovery.h"
|
||||
|
||||
typedef void (*user_btn_handler_t)(void);
|
||||
static user_btn_handler_t user_btn_handler;
|
||||
typedef void (*car_user_btn_handler_t)(void);
|
||||
|
||||
// @handler can be NULL
|
||||
inline void user_btn_init(user_btn_handler_t handler)
|
||||
{
|
||||
user_btn_handler = handler;
|
||||
STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
|
||||
}
|
||||
void car_user_btn_init(car_user_btn_handler_t handler);
|
||||
|
||||
inline bool user_btn_is_pushed(void)
|
||||
{
|
||||
return STM_EVAL_PBGetState(BUTTON_USER) == Bit_SET;
|
||||
}
|
||||
|
||||
void EXTI0_IRQHandler(void)
|
||||
{
|
||||
if (user_btn_handler)
|
||||
user_btn_handler();
|
||||
EXTI_ClearITPendingBit(USER_BUTTON_EXTI_LINE);
|
||||
}
|
||||
bool car_user_btn_is_pushed(void);
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void clear_buffer();
|
||||
|
||||
void send_int(int i);
|
||||
void send_buffer(int size, int pointer);
|
||||
|
||||
int receive_int();
|
||||
void receive_buffer(int size, int pointer);
|
||||
|
||||
void set_state(int i);
|
||||
int get_state();
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
extern char* malloc_static(int);
|
||||
@@ -1,9 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void time_init(void);
|
||||
void wait(volatile uint32_t ms);
|
||||
uint32_t get_timestamp(void);
|
||||
/*
|
||||
* Called from systick handler
|
||||
*/
|
||||
void timer_irq_handler();
|
||||
@@ -1,23 +0,0 @@
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "car_engine.h"
|
||||
#include "car_leds.h"
|
||||
#include "car_rc.h"
|
||||
#include "car_user_btn.h"
|
||||
#include "communication.h"
|
||||
#include "time.h"
|
||||
|
||||
#include "stm32f4xx_conf.h"
|
||||
#include "stm32f4xx_it.h"
|
||||
|
||||
int state = 0;
|
||||
|
||||
void set_state(int i) {
|
||||
state = i;
|
||||
}
|
||||
|
||||
int get_state() {
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "usbd_core.h"
|
||||
#include "usbd_cdc_core.h"
|
||||
|
||||
#include "time.h"
|
||||
#include "car_time.h"
|
||||
|
||||
extern uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
|
||||
extern USB_OTG_CORE_HANDLE USB_OTG_dev;
|
||||
@@ -110,7 +110,7 @@ void PendSV_Handler(void)
|
||||
*/
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
timer_irq_handler();
|
||||
car_time_irq_handler();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user