Un patch vite fait pas trop testé si y'a des amateurs, avant que je commite.
Olivier
? test/.aversive_conf ? test/.gdb_history ? test/autoconf.h ? test/compiler_files ? test/main ? test/main.elf ? test/main.hex ? test/timer_config.h Index: scheduler.h =================================================================== RCS file: /var/lib/cvs/aversive/modules/base/scheduler/scheduler.h,v retrieving revision 1.8.4.3 diff -u -p -I 'Revision :' -r1.8.4.3 scheduler.h --- scheduler.h 23 May 2007 17:18:11 -0000 1.8.4.3 +++ scheduler.h 14 Jun 2007 09:55:04 -0000 @@ -49,14 +49,58 @@ #include <aversive.h> #ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS #include <timer.h> -#endif +#endif /* CONFIG_MODULE_SCHEDULER_USE_TIMERS */ #include <scheduler_config.h> -#define SCHEDULER_MCU_CLOCK (F_CPU / KHz) +#ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS +#if SCHEDULER_TIMER_NUM == 0 +#define SCHEDULER_TIMER_REGISTER() timer0_register_OV_intr(scheduler_interrupt) +#define SCHEDULER_CLOCK_PRESCALER timer0_get_prescaler_div() +#ifdef TCNT0H +#define SCHEDULER_TIMER_BITS 16 +#else +#define SCHEDULER_TIMER_BITS 8 +#endif + +#elif SCHEDULER_TIMER_NUM == 1 +#define SCHEDULER_TIMER_REGISTER() timer1_register_OV_intr(scheduler_interrupt) +#define SCHEDULER_CLOCK_PRESCALER timer1_get_prescaler_div() +#ifdef TCNT1H +#define SCHEDULER_TIMER_BITS 16 +#else +#define SCHEDULER_TIMER_BITS 8 +#endif + +#elif SCHEDULER_TIMER_NUM == 2 +#define SCHEDULER_TIMER_REGISTER() timer2_register_OV_intr(scheduler_interrupt) +#define SCHEDULER_CLOCK_PRESCALER timer2_get_prescaler_div() +#ifdef TCNT2H +#define SCHEDULER_TIMER_BITS 16 +#else +#define SCHEDULER_TIMER_BITS 8 +#endif + +#elif SCHEDULER_TIMER_NUM == 3 +#define SCHEDULER_TIMER_REGISTER() timer3_register_OV_intr(scheduler_interrupt) +#define SCHEDULER_CLOCK_PRESCALER timer3_get_prescaler_div() +#ifdef TCNT3H +#define SCHEDULER_TIMER_BITS 16 +#else +#define SCHEDULER_TIMER_BITS 8 +#endif + +#else +#error "Bad SCHEDULER_TIMER_NUM value in config file" +#endif +#endif /* CONFIG_MODULE_SCHEDULER_USE_TIMERS */ /** TIME_UNIT is the number of microseconds between each interruption * if the prescaler equals 1 */ -#define TIMER_UNIT ( 256000l / (SCHEDULER_MCU_CLOCK) ) +#if SCHEDULER_TIMER_BITS == 8 +#define TIMER_UNIT ( 256000000LL / (CONFIG_QUARTZ) ) +#else +#define TIMER_UNIT ( 65536000000LL / (CONFIG_QUARTZ) ) +#endif /** SCHEDULER_UNIT is the REAL number of microseconds between each * interruption. We can use it like this : Index: scheduler_private.h =================================================================== RCS file: /var/lib/cvs/aversive/modules/base/scheduler/scheduler_private.h,v retrieving revision 1.1.2.4 diff -u -p -I 'Revision :' -r1.1.2.4 scheduler_private.h --- scheduler_private.h 23 May 2007 17:18:11 -0000 1.1.2.4 +++ scheduler_private.h 14 Jun 2007 09:55:04 -0000 @@ -22,13 +22,22 @@ #ifndef _SCHEDULER_PRIVATE_H_ #define _SCHEDULER_PRIVATE_H_ -#if _SCHEDULER_CONFIG_VERSION_ != 2 +/* sanity checks */ +#if _SCHEDULER_CONFIG_VERSION_ != 3 #warning "You are using an old version of scheduler_config.h file" -#warning "_SCHEDULER_CONFIG_VERSION_ is != 2" +#warning "_SCHEDULER_CONFIG_VERSION_ is != 3" #warning "Look in modules/base/scheduler/config directory to import changes" #warning "You should define SCHEDULER_NB_STACKING_MAX and SCHEDULER_CK" #endif +#ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS +#if defined SCHEDULER_TIMER_REGISTER || defined SCHEDULER_CLOCK_PRESCALER +#warning "SCHEDULER_TIMER_REGISTER or SCHEDULER_CLOCK_PRESCALER is already" +#warning "defined in your scheduler config file, and you are using the" +#warning "timer module." +#endif +#endif + #include <stdint.h> #include <aversive/queue.h> Index: config/scheduler_config.h =================================================================== RCS file: /var/lib/cvs/aversive/modules/base/scheduler/config/scheduler_config.h,v retrieving revision 1.1.10.5 diff -u -p -I 'Revision :' -r1.1.10.5 scheduler_config.h --- config/scheduler_config.h 23 May 2007 17:18:11 -0000 1.1.10.5 +++ config/scheduler_config.h 14 Jun 2007 09:55:04 -0000 @@ -22,7 +22,7 @@ #ifndef _SCHEDULER_CONFIG_H_ #define _SCHEDULER_CONFIG_H_ -#define _SCHEDULER_CONFIG_VERSION_ 2 +#define _SCHEDULER_CONFIG_VERSION_ 3 /** maximum number of allocated events */ #define SCHEDULER_NB_MAX_EVENT 5 @@ -32,9 +32,8 @@ this case, precaler is defined in timers_config.h in your project directory. */ #ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS -#define SCHEDULER_TIMER_REGISTER() timer0_register_OV_intr(scheduler_interrupt) -#define SCHEDULER_CLOCK_PRESCALER timer0_get_prescaler_div() - +/** the num of the timer to use for the scheduler */ +#define SCHEDULER_TIMER_NUM 0 /* or set the prescaler manually (in this case, you use must TIMER0, and the prescaler must be a correct value regarding the AVR device Index: test/scheduler_config.h =================================================================== RCS file: /var/lib/cvs/aversive/modules/base/scheduler/test/scheduler_config.h,v retrieving revision 1.4.10.4 diff -u -p -I 'Revision :' -r1.4.10.4 scheduler_config.h --- test/scheduler_config.h 23 May 2007 17:18:11 -0000 1.4.10.4 +++ test/scheduler_config.h 14 Jun 2007 09:55:04 -0000 @@ -22,7 +22,7 @@ #ifndef _SCHEDULER_CONFIG_H_ #define _SCHEDULER_CONFIG_H_ -#define _SCHEDULER_CONFIG_VERSION_ 2 +#define _SCHEDULER_CONFIG_VERSION_ 3 /** maximum number of allocated events */ #define SCHEDULER_NB_MAX_EVENT 5 @@ -32,9 +32,8 @@ this case, precaler is defined in timers_config.h in your project directory. */ #ifdef CONFIG_MODULE_SCHEDULER_USE_TIMERS -#define SCHEDULER_TIMER_REGISTER() timer0_register_OV_intr(scheduler_interrupt) -#define SCHEDULER_CLOCK_PRESCALER timer0_get_prescaler_div() - +/** the num of the timer to use for the scheduler */ +#define SCHEDULER_TIMER_NUM 0 /* or set the prescaler manually (in this case, you use must TIMER0, and the prescaler must be a correct value regarding the AVR device
_______________________________________________ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog