Changeset 101
- Timestamp:
- 06/18/2007 06:31:30 PM (5 years ago)
- Location:
- nano-RK
- Files:
-
- 4 added
- 8 edited
-
include/common.mk (modified) (1 diff)
-
projects/basic_reserves (added)
-
projects/basic_reserves/main.c (added)
-
projects/basic_reserves/makefile (added)
-
projects/basic_reserves/nrk_cfg.h (added)
-
projects/basic_rtl/rtl_tx/main.c (modified) (5 diffs)
-
projects/basic_rtl/rtl_tx/makefile (modified) (1 diff)
-
src/kernel/include/nrk_reserve.h (modified) (1 diff)
-
src/kernel/source/nrk.c (modified) (2 diffs)
-
src/kernel/source/nrk_reserve.c (modified) (1 diff)
-
src/kernel/source/nrk_time.c (modified) (1 diff)
-
src/net/rt_link/platform/firefly2/rt_link.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
nano-RK/include/common.mk
r95 r101 66 66 SRC += $(ROOT_DIR)/src/kernel/source/nrk_scheduler.c 67 67 SRC += $(ROOT_DIR)/src/kernel/source/nrk_driver.c 68 SRC += $(ROOT_DIR)/src/kernel/source/nrk_reserve.c 68 69 SRC += $(ROOT_DIR)/src/kernel/hal/$(MCU)/nrk_timer.c 69 70 SRC += $(ROOT_DIR)/src/kernel/hal/$(MCU)/nrk_status.c -
nano-RK/projects/basic_rtl/rtl_tx/main.c
r1 r101 37 37 nrk_init(); 38 38 39 nrk_ clr_led(0);40 nrk_ clr_led(1);41 nrk_ clr_led(2);42 nrk_ clr_led(3);39 nrk_led_clr(0); 40 nrk_led_clr(1); 41 nrk_led_clr(2); 42 nrk_led_clr(3); 43 43 44 44 nrk_time_set(0,0); … … 74 74 75 75 while(!rtl_ready()) nrk_wait_until_next_period(); 76 nrk_ set_led(0);76 nrk_led_set(0); 77 77 while(1) { 78 78 79 79 if( rtl_check_rx_status()!=0 ) 80 80 { 81 nrk_ set_led(1);81 nrk_led_set(1); 82 82 printf( "Got Packet on slot %d %d: ",rtl_rx_slot,rtl_rfRxInfo.length ); 83 83 for(i=PKT_DATA_START; i<rtl_rfRxInfo.length; i++ ) … … 87 87 nrk_kprintf( PSTR("\r\n") ); 88 88 rtl_release_rx_packet(); 89 nrk_ clr_led(1);89 nrk_led_clr(1); 90 90 } 91 91 … … 95 95 } 96 96 else { 97 nrk_ set_led(2);97 nrk_led_set(2); 98 98 cnt++; 99 99 rfTxInfo.pPayload=tx_buf; … … 102 102 rtl_tx_packet( &rfTxInfo, MY_TX_SLOT ); 103 103 printf( "Sending Packet on slot %d\r\n",MY_TX_SLOT ); 104 nrk_ clr_led(2);104 nrk_led_clr(2); 105 105 } 106 106 -
nano-RK/projects/basic_rtl/rtl_tx/makefile
r1 r101 29 29 30 30 # Platform name cc2420DK, firefly, micaZ 31 PLATFORM = firefly2 31 PLATFORM = firefly2_2 32 32 33 33 ROOT_DIR = ../../.. -
nano-RK/src/kernel/include/nrk_reserve.h
r15 r101 29 29 * Anthony Rowe 30 30 *******************************************************************************/ 31 #ifndef NRK_RESERVE_H 32 #define NRK_RESERVE_H 33 34 #include <nrk_cfg.h> 35 36 #ifdef NRK_MAX_RESERVES 37 38 void _nrk_reserve_init(); 39 40 int8_t nrk_reserve_create(); 41 int8_t nrk_reserve_delete(uint8_t reserve_id); 42 // Get counts remaining 43 uint8_t nrk_reserve_get(uint8_t reserve_id); 44 // Set period and counts in reserve 45 int8_t nrk_reserve_set(uint8_t id, nrk_time_t *period,int16_t access_count,void *errhandler); 46 // Consume reserve 47 int8_t nrk_reserve_consume(uint8_t reserve_id); 48 49 void _nrk_reserve_update(uint8_t reserve_id); 31 50 32 51 33 void nrk_consume_reserve(uint8_t reserve_id);34 int32_t nrk_status(uint8_t reserve_id,uint8_t options);35 uint8_t nrk_set_reserve(uint32_t seconds,uint32_t nanoseconds,int16_t access_count,uint8_t type,uint8_t id,void *errhandler);36 52 typedef struct nrk_reserve 37 53 { 38 uint32_t period;//period in ticks 39 uint32_t s_time; 40 uint32_t c_time;//current time in ticks 41 int16_t access;//reserve on number of calls etc.. 42 int16_t c_access;//current count of accesses 43 uint8_t id; 44 uint8_t type; 54 uint32_t period_ticks; //period in ticks 55 uint32_t set_time; 56 uint32_t cur_time;//current time in ticks 57 int16_t set_access;//reserve on number of calls etc.. 58 int16_t cur_access;//current count of accesses 59 int8_t active; 45 60 void (*error)(); 46 61 }nrk_reserve; 47 nrk_reserve * get_reserve(uint8_t reserve_id); 62 63 #endif 64 #endif -
nano-RK/src/kernel/source/nrk.c
r95 r101 43 43 #include <nrk_stack_check.h> 44 44 #include <nrk_status.h> 45 #include <nrk_reserve.h> 45 46 #include <nrk_cfg.h> 46 47 … … 105 106 nrk_high_ready_TCB = NULL; 106 107 nrk_high_ready_prio = 0; 108 109 110 // Setup the reserve structures 111 _nrk_reserve_init(); 107 112 108 113 _nrk_resource_cnt=0; //NRK_MAX_RESOURCE_CNT; -
nano-RK/src/kernel/source/nrk_reserve.c
r15 r101 31 31 *******************************************************************************/ 32 32 33 #include <nrk_cfg.h> 33 34 34 #include<nrk_time.h> 35 #include<nrk.h> 36 #include<nrk_cfg.h> 37 #include<nrk_error.h> 35 #ifdef NRK_MAX_RESERVES 36 37 #include <nrk_time.h> 38 #include <nrk.h> 39 #include <nrk_error.h> 38 40 #include <nrk_reserve.h> 39 int _curr_reserve_count=0; 41 40 42 nrk_reserve _nrk_reserve[NRK_MAX_RESERVES]; 41 43 //experimental 42 nrk_reserve * get_reserve(uint8_t reserve_id) 44 45 46 // This function is called by the kernel at startup 47 // to clear the list of reserves 48 void _nrk_reserve_init () 43 49 { 44 int i=0; 45 for(i=0;i<_curr_reserve_count;i++) 46 if(_nrk_reserve[i].id==reserve_id) 47 return & _nrk_reserve[i]; 50 uint8_t i; 48 51 49 return NULL; 52 for (i = 0; i < NRK_MAX_RESERVES; i++) 53 _nrk_reserve[i].active = -1; 54 } 50 55 56 // This function returns the id of a free reserve 57 // This returns NRK_ERROR if there are no free reserves 58 int8_t nrk_reserve_create () 59 { 60 int8_t i; 61 for (i = 0; i < NRK_MAX_RESERVES; i++) { 62 if (_nrk_reserve[i].active == -1) { 63 // Check and Accept 64 _nrk_reserve[i].active = 1; 65 return i; 66 } 67 } 68 69 return NRK_ERROR; 51 70 } 52 void nrk_consume_reserve(uint8_t reserve_id) 71 72 // This function frees a current reserve 73 // This returns NRK_ERROR if the reserve does not exist 74 int8_t nrk_reserve_delete (uint8_t reserve_id) 75 { 76 int8_t i; 77 if (reserve_id >= 0 && reserve_id < NRK_MAX_RESERVES) { 78 if (_nrk_reserve[i].active == 1) { 79 _nrk_reserve[i].active = 0; 80 return NRK_OK; 81 } 82 } 83 return NRK_ERROR; 84 } 85 86 87 88 89 uint8_t nrk_reserve_get (uint8_t reserve_id) 53 90 { 54 91 92 if (reserve_id >= NRK_MAX_RESERVES) { 93 _nrk_errno_set (1); 94 return 0; 95 } 96 if (_nrk_reserve[reserve_id].active == -1) { 97 // Reserve isn't active 98 _nrk_errno_set (2); 99 return 0; 100 } 55 101 56 nrk_time_t t; 57 nrk_int_disable(); 58 nrk_time_get(&t);//maybe inline 102 _nrk_reserve_update (reserve_id); 59 103 60 _nrk_reserve[reserve_id].c_time=(int32_t)_nrk_time_to_ticks_long(t); 61 if(_nrk_reserve[reserve_id].c_time>=_nrk_reserve[reserve_id].s_time) 62 { 63 _nrk_reserve[reserve_id].s_time=_nrk_reserve[reserve_id].c_time + _nrk_reserve[reserve_id].period; 64 _nrk_reserve[reserve_id].c_access=0; 65 nrk_int_enable(); 66 } 67 else if((_nrk_reserve[reserve_id].access-1<=_nrk_reserve[reserve_id].c_access)) 68 { 69 nrk_int_enable(); 70 _nrk_reserve[reserve_id].error(); 71 } 72 else 73 { 74 _nrk_reserve[reserve_id].c_access++; 75 nrk_int_enable(); 76 } 77 } 104 if (_nrk_reserve[reserve_id].cur_access > 105 _nrk_reserve[reserve_id].set_access) 106 return 0; 107 return (_nrk_reserve[reserve_id].set_access - 108 _nrk_reserve[reserve_id].cur_access); 109 } 78 110 79 int32_t nrk_status(uint8_t reserve_id,uint8_t options)111 void _nrk_reserve_update (uint8_t reserve_id) 80 112 { 113 nrk_time_t t; 81 114 82 if(options) 83 return (_nrk_reserve[reserve_id].c_time-_nrk_reserve[reserve_id].c_time); 84 else 85 return _nrk_reserve[reserve_id].access-_nrk_reserve[reserve_id].c_access-1; 115 nrk_int_disable (); 116 nrk_time_get (&t); 117 118 _nrk_reserve[reserve_id].cur_time = (int32_t) _nrk_time_to_ticks_long (t); 119 if (_nrk_reserve[reserve_id].cur_time >= _nrk_reserve[reserve_id].set_time) { 120 // If the reserve is passed its period then replenish it 121 _nrk_reserve[reserve_id].set_time = 122 _nrk_reserve[reserve_id].cur_time + 123 _nrk_reserve[reserve_id].period_ticks; 124 _nrk_reserve[reserve_id].cur_access = 0; 125 } 126 nrk_int_enable (); 86 127 87 128 } 88 129 89 uint8_t nrk_set_reserve(uint32_t seconds,uint32_t nanoseconds,int16_t access_count,uint8_t type,uint8_t id,void *errhandler) 90 { 91 nrk_time_t tmp_time; 92 if(_curr_reserve_count>NRK_MAX_RESERVES) 93 { 94 return 0; 95 } 96 tmp_time.secs=seconds; 97 tmp_time.nano_secs=nanoseconds; 98 _nrk_reserve[_curr_reserve_count].period=_nrk_time_to_ticks_long(tmp_time); 99 _nrk_reserve[_curr_reserve_count].access=access_count; 100 _nrk_reserve[_curr_reserve_count].c_access=0; 101 _nrk_reserve[_curr_reserve_count].id=id; 102 nrk_time_get(&tmp_time);//maybe inline 103 _nrk_reserve[_curr_reserve_count].c_time=(uint32_t)_nrk_time_to_ticks_long(tmp_time); 104 _nrk_reserve[_curr_reserve_count].s_time=_nrk_reserve[_curr_reserve_count].c_time + _nrk_reserve[_curr_reserve_count].period; 105 _nrk_reserve[_curr_reserve_count].type=type; 106 _nrk_reserve[_curr_reserve_count].error=(void*)errhandler; 107 _curr_reserve_count++; 108 return _curr_reserve_count-1; 130 int8_t nrk_reserve_consume (uint8_t reserve_id) 131 { 132 133 if (reserve_id >= NRK_MAX_RESERVES) { 134 _nrk_errno_set (1); 135 return NRK_ERROR; 136 } 137 if (_nrk_reserve[reserve_id].active == -1) { 138 _nrk_errno_set (2); 139 return NRK_ERROR; 140 } 141 142 _nrk_reserve_update (reserve_id); 143 144 if ((_nrk_reserve[reserve_id].set_access < 145 _nrk_reserve[reserve_id].cur_access)) { 146 // You violated your resource (like MJ after a little boy) 147 nrk_int_enable (); 148 if (_nrk_reserve[reserve_id].error != NULL) 149 _nrk_reserve[reserve_id].error (); 150 return NRK_ERROR; 151 } 152 else { 153 // Reserve is fine. Take some of it. 154 _nrk_reserve[reserve_id].cur_access++; 155 } 156 157 158 return NRK_OK; 109 159 } 160 161 int8_t nrk_reserve_set (uint8_t id, nrk_time_t * period, int16_t access_count, 162 void *errhandler) 163 { 164 nrk_time_t tmp_time; 165 166 if (id >= NRK_MAX_RESERVES) 167 return NRK_ERROR; 168 if (_nrk_reserve[id].active == -1) 169 return NRK_ERROR; 170 171 tmp_time.secs = period->secs; 172 tmp_time.nano_secs = period->nano_secs; 173 _nrk_reserve[id].period_ticks = _nrk_time_to_ticks_long (tmp_time); 174 _nrk_reserve[id].set_access = access_count; 175 _nrk_reserve[id].cur_access = 0; 176 177 nrk_time_get (&tmp_time); 178 _nrk_reserve[id].cur_time = (uint32_t) _nrk_time_to_ticks_long (tmp_time); 179 _nrk_reserve[id].set_time = 180 _nrk_reserve[id].cur_time + _nrk_reserve[id].period_ticks; 181 _nrk_reserve[id].error = (void *) errhandler; 182 183 return NRK_OK; 184 } 185 186 #endif -
nano-RK/src/kernel/source/nrk_time.c
r15 r101 158 158 uint32_t ticks; 159 159 uint32_t tmp; 160 // FIXME: This will overflow161 160 162 161 if(t.secs>=1) -
nano-RK/src/net/rt_link/platform/firefly2/rt_link.c
r15 r101 73 73 74 74 75 #define RTL_DEBUG75 //#define RTL_DEBUG 76 76 //#define LED_DEBUG 77 77 #define GPIO_SLOT_DEBUG … … 348 348 timer=0; 349 349 battery_save_cnt=0; 350 nrk_ set_led(2);350 nrk_led_set(2); 351 351 while(1) 352 352 { … … 354 354 rtl_rfRxInfo.pPayload[GLOBAL_SLOT+1]=0xFF; 355 355 #ifdef LED_DEBUG 356 nrk_ set_led(1);356 nrk_led_set(1); 357 357 #endif 358 358 #ifdef GPIO_RX_DEBUG … … 481 481 482 482 #ifdef LED_DEBUG 483 nrk_ clr_led(1);483 nrk_led_clr(1); 484 484 #endif 485 485 … … 573 573 574 574 #ifdef LED_DEBUG 575 nrk_ set_led(1);575 nrk_led_set(1); 576 576 #endif 577 577 rf_set_rx (&rtl_rfRxInfo, rtl_param.channel); // sets rx buffer and channel … … 592 592 #endif 593 593 #ifdef LED_DEBUG 594 nrk_ clr_led(1);594 nrk_led_clr(1); 595 595 #endif 596 rtl_debug_dropped_pkt(); 596 // FIXME: add this back later 597 // rtl_debug_dropped_pkt(); 597 598 return; 598 599 } … … 624 625 uint8_t explicit_sync_pkt; 625 626 // CRC and checksum passed 626 rtl_debug_rx_pkt(1); 627 // FIXME: DEBUG add back 628 //rtl_debug_rx_pkt(1); 627 629 rtl_rx_data_ready = 1; 628 630 rtl_rx_slot = slot; … … 659 661 660 662 #ifdef LED_DEBUG 661 nrk_ clr_led(1);663 nrk_led_clr (1); 662 664 #endif 663 665 #ifdef GPIO_RX_DEBUG … … 692 694 #endif 693 695 #ifdef LED_DEBUG 694 nrk_ set_led(0);696 nrk_led_set(0); 695 697 #endif 696 698 //rf_tx_packet (rtl_rfTxInfo[slot]); … … 704 706 705 707 #ifdef LED_DEBUG 706 nrk_ clr_led(0);708 nrk_led_clr (0); 707 709 #endif 708 710 #ifdef GPIO_TX_DEBUG
Note: See TracChangeset
for help on using the changeset viewer.
