Skip to content

Commit

Permalink
feat: (Module) Totally refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
but0n committed Sep 4, 2017
1 parent 4c50f41 commit cfe0f67
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
64 changes: 64 additions & 0 deletions libs/module/avm_core.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <avm_core.h>

static unsigned char avm_core_init(void *arg);

avm_module_t avm_core_module_st = {
0,
NULL,
avm_core_init,
NULL,
NULL
};

void jump2ISP() {
__set_MSP(*(unsigned int *)ISP_ADDR);
((void (*)(void))*((unsigned int *)(ISP_ADDR + 4)))();
}

void delay_ms(unsigned int t) {
SysTick->LOAD = 9000 * t;
SysTick->VAL = 0;
SysTick->CTRL = 0x01;
for(unsigned int tmp = SysTick->CTRL;(tmp&0x01)&&(!(tmp&SysTick_CTRL_COUNTFLAG));tmp = SysTick->CTRL);
SysTick->CTRL = 0;
SysTick->VAL = 0;
}

// 延时函数, 单位为微秒
void delay_us(unsigned int t) {
SysTick->LOAD = 9 * t;
SysTick->VAL = 0;
SysTick->CTRL = 0x01;
for(unsigned int tmp = SysTick->CTRL;(tmp&0x01)&&(!(tmp&SysTick_CTRL_COUNTFLAG));tmp = SysTick->CTRL);
SysTick->CTRL = 0;
SysTick->VAL = 0;
}

avm_module_t *avm_modules_pool[] = {
&avm_core_module_st,
&avm_uart_module_st,
&avm_i2c_module_st,
&avm_motor_module_st,
&avm_mpu_module_st,
NULL
};

static unsigned char avm_core_init(void *arg) {
NVIC_SetPriorityGrouping(0x07 - NVIC_GROUPING);

avm_module_t *p_core = avm_modules_pool[0];
// Count
static unsigned char avm_modules_num = 0;
for(;avm_modules_pool[avm_modules_num] != NULL;avm_modules_num++) {
avm_modules_pool[avm_modules_num]->index = avm_modules_num;
}

p_core->confs = (void *)&avm_modules_num; // Stored
// Initial
avm_module_t **this = &avm_modules_pool[1];
for(;*this != NULL;this++) {
(*this)->init_module((*this)->confs);
}

return 0;
}
39 changes: 39 additions & 0 deletions libs/module/avm_core.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#ifndef _AVM_CORE_H_
#define _AVM_CORE_H_

typedef struct avm_module_s avm_module_t;
// typedef struct avm_string_s avm_string_t;

#include <math.h>
#include <stm32f10x.h>
// #include <avm_string.h>
#include <avm_bit.h>
#include <avm_mpu6050.h>
#include <avm_motor.h>
#include <avm_uart.h>
#include <avm_wifi.h>
#include <avm_pid.h>
#include <avm_i2c.h>
#include <avm_tty.h>

struct avm_module_s {
unsigned short index;
unsigned int *confs;
unsigned char (*init_module)(void *arg);
unsigned char (*enable_module)(void);
unsigned char (*disable_module)(void);
};

extern avm_module_t *avm_modules_pool[];
extern avm_module_t avm_core_module_st;

void delay_ms(unsigned int t);
void delay_us(unsigned int t);

#define NVIC_GROUPING 3
// Jump to built-in bootloader
#define ISP_ADDR 0x1FFFF000
void jump2ISP();


#endif
12 changes: 12 additions & 0 deletions libs/module/avm_string.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef _AVM_STRING_H_
#define _AVM_STRING_H_

struct avm_string_s {
unsigned char * string;
unsigned int len;
};

#define avm_string(str) { (unsigned char *)(str), sizeof((str) - 1) }
#define avm_null_string { 0, NULL }

#endif

0 comments on commit cfe0f67

Please sign in to comment.