diff --git a/dynamixel_manager/Makefile b/dynamixel_manager/Makefile index 4ebb37992b0d459fc28f3864365f430b99e11ee1..020c8182f704eec57c52c1efec5a4c7590ff25d3 100755 --- a/dynamixel_manager/Makefile +++ b/dynamixel_manager/Makefile @@ -18,6 +18,8 @@ MEMORY_PATH = ../memory INCLUDE_DIRS = -I./include/ -I./include/modules -I$(COMM_PATH)/include -I$(UTILS_PATH)/include -I$(DYN_BASE_PATH)/include -I$(MEMORY_PATH)/include +MACROS = -DMAX_DYN_MASTER_TX_BUFFER_LEN=256 -DMAX_DYN_MASTER_RX_BUFFER_LEN=256 -DDYN_MANAGER_MAX_NUM_MASTERS=4 -DDYN_MANAGER_MAX_NUM_MODULES=8 -DDYN_MANAGER_MAX_NUM_DEVICES=32 -DDYN_MANAGER_MAX_NUM_SINGLE_OP=16 -DDYN_MANAGER_MAX_NUM_SYNC_OP=4 -DDYN_MANAGER_MAX_NUM_BULK_OP=4 -DMODULE_MAX_NUM_MODELS=32 -DMM_MAX_NUM_MOTION_MODULES=8 + TCHAIN_PREFIX=arm-none-eabi- CC = $(TCHAIN_PREFIX)gcc @@ -33,8 +35,8 @@ DYNAMIXEL_OUT_M3 = ./lib/dynamixel_manager_m3.a SRC_DIR=./src/ SRC=$(wildcard $(SRC_DIR)*.c) -SRC_DIR_MODULES=./src/modules/ -SRC+=$(wildcard $(SRC_DIR_MODULES)*.c) +#SRC_DIR_MODULES=./src/modules/ +#SRC+=$(wildcard $(SRC_DIR_MODULES)*.c) DYNAMIXEL_M4_FPU_OBJ_DIR=build/m4_fpu/ DYNAMIXEL_M4_FPU_OBJS_TMP = $(notdir $(SRC:.c=.o)) @@ -54,21 +56,21 @@ DYNAMIXEL_M3_OBJS = $(patsubst %,$(DYNAMIXEL_M3_OBJ_DIR)%,$(DYNAMIXEL_M3_OBJS_TM all: $(DYNAMIXEL_OUT_M4_FPU) $(DYNAMIXEL_OUT_M0) $(DYNAMIXEL_OUT_M0plus) $(DYNAMIXEL_OUT_M3) $(DYNAMIXEL_M4_FPU_OBJ_DIR)%.o: $(SRC_DIR)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M4_FPU) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M4_FPU) -o $@ $< $(DYNAMIXEL_M4_FPU_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M4_FPU) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M4_FPU) -o $@ $< $(DYNAMIXEL_M0_OBJ_DIR)%.o: $(SRC_DIR)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0) -o $@ $< $(DYNAMIXEL_M0_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0) -o $@ $< $(DYNAMIXEL_M0plus_OBJ_DIR)%.o: $(SRC_DIR)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0plus) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0plus) -o $@ $< $(DYNAMIXEL_M0plus_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0plus) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0plus) -o $@ $< $(DYNAMIXEL_M3_OBJ_DIR)%.o: $(SRC_DIR)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M3) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M3) -o $@ $< $(DYNAMIXEL_M3_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c - $(CC) -c $(CFLAGS) $(COMPILE_OPTS_M3) -o $@ $< + $(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M3) -o $@ $< mkdir_build: mkdir -p build/m4_fpu mkdir -p build/m0 diff --git a/dynamixel_manager/include/dyn_manager.h b/dynamixel_manager/include/dyn_manager.h index b9f03388a2dcf3461dcad06f3d654ff32a2c3adf..b5c8cff1085b6254a1b1b635de67f422e1b78287 100644 --- a/dynamixel_manager/include/dyn_manager.h +++ b/dynamixel_manager/include/dyn_manager.h @@ -6,22 +6,22 @@ #include "memory.h" #ifndef DYN_MANAGER_MAX_NUM_MASTERS - #define DYN_MANAGER_MAX_NUM_MASTERS 4 + #error "Please, specify the maximum number of masters with the DYN_MANAGER_MAX_NUM_MASTERS macro" #endif #ifndef DYN_MANAGER_MAX_NUM_MODULES - #define DYN_MANAGER_MAX_NUM_MODULES 8 + #error "Please, specify the maximum number of modules with the DYN_MANAGER_MAX_NUM_MODULES macro" #endif #ifndef DYN_MANAGER_MAX_NUM_DEVICES - #define DYN_MANAGER_MAX_NUM_DEVICES 32 + #error "Please, specify the maximum number of devices with the DYN_MANAGER_MAX_NUM_DEVICES macro" #endif #ifndef DYN_MANAGER_MAX_NUM_SINGLE_OP - #define DYN_MANAGER_MAX_NUM_SINGLE_OP 16 + #error "Please, specify the maximum number of single operations with the DYN_MANAGER_MAX_NUM_SINGLE_OP macro" #endif #ifndef DYN_MANAGER_MAX_NUM_SYNC_OP - #define DYN_MANAGER_MAX_NUM_SYNC_OP 4 + #error "Please, specify the maximum number of sync operations with the DYN_MANAGER_MAX_NUM_SYNC_OP macro" #endif #ifndef DYN_MANAGER_MAX_NUM_BULK_OP - #define DYN_MANAGER_MAX_NUM_BULK_OP 4 + #error "Please, specify the maximum number of bulk operations with the DYN_MANAGER_MAX_NUM_BULK_OP macro" #endif #define DYN_MANAGER_MAX_NUM_OP ((DYN_MANAGER_MAX_NUM_SINGLE_OP+DYN_MANAGER_MAX_NUM_SYNC_OP+DYN_MANAGER_MAX_NUM_BULK_OP)*DYN_MANAGER_MAX_NUM_MASTERS) @@ -101,6 +101,8 @@ typedef struct{ struct TDynModule; typedef struct{ + unsigned short int eeprom_base_address; + unsigned short int ram_base_address; TDynamixelMaster *masters[DYN_MANAGER_MAX_NUM_MASTERS]; TDynManagerOps operations[DYN_MANAGER_MAX_NUM_MASTERS]; unsigned char num_masters; @@ -113,11 +115,12 @@ typedef struct{ unsigned short int period_us; void (*init_timer)(void); void (*set_period)(unsigned short int period_us); + TMemory *memory; TMemModule mem_module; }TDynManager; // public functions -unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory); +unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,unsigned short int eeprom_base_address,unsigned short int ram_base_address); void dyn_manager_set_period(TDynManager *manager,unsigned short int period_us); unsigned short int dyn_manager_get_period(TDynManager *manager); void dyn_manager_scan(TDynManager *manager); diff --git a/dynamixel_manager/include/dyn_manager_registers.h b/dynamixel_manager/include/dyn_manager_registers.h index 7099cc7d5ce6a4292d3a7b7c2c96164bbe2e0264..c7d360be6c57731f044ba572f5d6af9b17b51455 100644 --- a/dynamixel_manager/include/dyn_manager_registers.h +++ b/dynamixel_manager/include/dyn_manager_registers.h @@ -1,26 +1,18 @@ #ifndef _DYN_MANAGER_REGISTERS_H #define _DYN_MANAGER_REGISTERS_H -#ifndef RAM_DYN_MANAGER_BASE_ADDRESS - #define RAM_DYN_MANAGER_BASE_ADDRESS ((unsigned short int)0x0000) -#endif - -#ifndef EEPROM_DYN_MANAGER_BASE_ADDRESS - #define EEPROM_DYN_MANAGER_BASE_ADDRESS ((unsigned short int)0x0000) -#endif - #define RAM_DYN_MANAGER_LENGTH 2 #define EEPROM_DYN_MANAGER_LENGTH 2 -#define DYN_MANAGER_PERIOD EEPROM_DYN_MANAGER_BASE_ADDRESS +#define DYN_MANAGER_PERIOD 0 -#define DYN_MANAGER_NUM_MODULES RAM_DYN_MANAGER_BASE_ADDRESS -#define DYN_MANAGER_NUM_MASTERS (RAM_DYN_MANAGER_BASE_ADDRESS+1) +#define DYN_MANAGER_NUM_MODULES 0 +#define DYN_MANAGER_NUM_MASTERS 1 -#ifndef DEFAULT_DYN_MANAGER_PERIOD - #define DEFAULT_DYN_MANAGER_PERIOD 0x1E78 -#endif +#define dyn_manager_eeprom_data(name,section_name,base_address,DEFAULT_PERIOD) \ +unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_PERIOD&0x00FF,base_address+DYN_MANAGER_PERIOD, \ + (DEFAULT_PERIOD>>8)&0x00FF,base_address+DYN_MANAGER_PERIOD+1}; #endif diff --git a/dynamixel_manager/include/dyn_module.h b/dynamixel_manager/include/dyn_module.h index f4c6d44fad8636bfe75fb69f09f4484344900090..a79d6c6a7669d5c3a3405ac8d2546fb08e2a3ff9 100644 --- a/dynamixel_manager/include/dyn_module.h +++ b/dynamixel_manager/include/dyn_module.h @@ -2,7 +2,7 @@ #define _DYN_MODULE_H #ifndef MODULE_MAX_NUM_MODELS - #define MODULE_MAX_NUM_MODELS 32 + #error "Please, specify the maximum number of dynamixel master modules with the MODULE_MAX_NUM_MODELS macro" #endif #include "dyn_manager.h" diff --git a/dynamixel_manager/include/dyn_module_registers.h b/dynamixel_manager/include/dyn_module_registers.h index c4c7afdf264b1289021c6f3478da61db963cfe8e..fe27dbb309ebefbe6eb880dd716b8ce44518836e 100644 --- a/dynamixel_manager/include/dyn_module_registers.h +++ b/dynamixel_manager/include/dyn_module_registers.h @@ -5,15 +5,14 @@ #define EEPROM_DYN_MODULE_LENGTH 1 -#define DYN_MODULE_PERIOD EEPROM_DYN_MODULE_BASE_ADDRESS +#define DYN_MODULE_PERIOD 0 -#define DYN_MODULE_CNTRL RAM_DYN_MODULE_BASE_ADDRESS -#define DYN_MODULE_NUM_MODELS (RAM_DYN_MODULE_BASE_ADDRESS+1) -#define DYN_MODULE_NUM_DEVICES (RAM_DYN_MODULE_BASE_ADDRESS+2) +#define DYN_MODULE_CNTRL 0 +#define DYN_MODULE_NUM_MODELS 1 +#define DYN_MODULE_NUM_DEVICES 2 -#ifndef DEFAULT_DYN_MODULE_PERIOD - #define DEFAULT_DYN_MODULE_PERIOD 0x01 -#endif +#define dyn_module_eeprom_data(name,section_name,base_address,DEFAULT_PERIOD) \ +unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_PERIOD,base_address+DYN_MODULE_PERIOD}; #endif diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c index 8499d2c1a5130a45251b9d02167c47bba4e6338d..73db6b175604463e9a7c863b62610ea24b11530d 100644 --- a/dynamixel_manager/src/dyn_manager.c +++ b/dynamixel_manager/src/dyn_manager.c @@ -37,7 +37,7 @@ void dyn_manager_write_cmd(TDynManager *module,unsigned short int address,unsign void dyn_manager_read_cmd(TDynManager *module,unsigned short int address,unsigned short int length,unsigned char *data) { - ram_read_table(address,length,data); + ram_read_table(module->memory,address,length,data); } unsigned char dyn_manager_check_id(TDynManager *manager,unsigned char id) @@ -211,7 +211,7 @@ void dyn_manager_delete_op_single_master(TDynManager *manager,unsigned char mast } // public functions -unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory) +unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,unsigned short int eeprom_base_address,unsigned short int ram_base_address) { unsigned char i,j,k; @@ -284,19 +284,20 @@ unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory) /* initialize timer */ if(manager->init_timer!=0x00000000) manager->init_timer(); - manager->set_period(DEFAULT_DYN_MANAGER_PERIOD); /* initialize memory module */ mem_module_init(&manager->mem_module); manager->mem_module.data=manager; manager->mem_module.write_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_manager_write_cmd; manager->mem_module.read_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_manager_read_cmd; - if(!mem_module_add_ram_segment(&manager->mem_module,RAM_DYN_MANAGER_BASE_ADDRESS,RAM_DYN_MANAGER_LENGTH)) + if(!mem_module_add_ram_segment(&manager->mem_module,ram_base_address,RAM_DYN_MANAGER_LENGTH)) return 0x00; - if(!mem_module_add_eeprom_segment(&manager->mem_module,EEPROM_DYN_MANAGER_BASE_ADDRESS,EEPROM_DYN_MANAGER_LENGTH)) + if(!mem_module_add_eeprom_segment(&manager->mem_module,eeprom_base_address,EEPROM_DYN_MANAGER_LENGTH)) return 0x00; if(!mem_add_module(memory,&manager->mem_module)) return 0x00; + manager->eeprom_base_address=eeprom_base_address; + manager->ram_base_address=ram_base_address; return 0x01; } @@ -312,8 +313,8 @@ void dyn_manager_set_period(TDynManager *manager,unsigned short int period_us) if(manager->modules[i]!=0x00000000 && manager->modules[i]->set_period!=0x00000000) manager->modules[i]->set_period(manager->modules[i]->data,period_us); manager->period_us=period_us; - ram_data[DYN_MANAGER_PERIOD]=period_us%256; - ram_data[DYN_MANAGER_PERIOD+1]=period_us/256; + manager->memory->data[DYN_MANAGER_PERIOD]=period_us%256; + manager->memory->data[DYN_MANAGER_PERIOD+1]=period_us/256; } } @@ -368,7 +369,7 @@ void dyn_manager_add_master(TDynManager *manager,TDynamixelMaster *master) { manager->masters[i]=master; manager->num_masters++; - ram_data[DYN_MANAGER_NUM_MASTERS]++; + manager->memory->data[DYN_MANAGER_NUM_MASTERS]++; } } @@ -402,7 +403,7 @@ void dyn_manager_add_module(TDynManager *manager,TDynModule *module) manager->modules[i]=module; manager->num_modules++; module->manager=manager; - ram_data[DYN_MANAGER_NUM_MODULES]++; + manager->memory->data[DYN_MANAGER_NUM_MODULES]++; } }