##// END OF EJS Templates
1.0.0.7...
paul -
r135:f2636eaf863a VHDLib206
parent child
Show More
@@ -0,0 +1,145
1 /*
2 * CPU Usage Reporter
3 *
4 * COPYRIGHT (c) 1989-2009
5 * On-Line Applications Research Corporation (OAR).
6 *
7 * The license and distribution terms for this file may be
8 * found in the file LICENSE in this distribution or at
9 * http://www.rtems.com/license/LICENSE.
10 *
11 * $Id$
12 */
13
14 #ifdef HAVE_CONFIG_H
15 #include "config.h"
16 #endif
17
18 #include <rtems.h>
19
20 #include <assert.h>
21 #include <string.h>
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <ctype.h>
25 #include <inttypes.h>
26
27 #include <rtems/cpuuse.h>
28 #include <rtems/bspIo.h>
29
30 #include "lfr_cpu_usage_report.h"
31
32 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
33 #include <rtems/score/timestamp.h>
34 #endif
35
36 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
37 extern Timestamp_Control CPU_usage_Uptime_at_last_reset;
38 #else
39 extern uint32_t CPU_usage_Ticks_at_last_reset;
40 #endif
41
42 /*PAGE
43 *
44 * rtems_cpu_usage_report
45 */
46
47 unsigned char lfr_rtems_cpu_usage_report( void )
48 {
49 uint32_t api_index;
50 Thread_Control *the_thread;
51 Objects_Information *information;
52 uint32_t ival, fval;
53 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
54 Timestamp_Control uptime, total, ran;
55 #else
56 uint32_t total_units = 0;
57 #endif
58
59 unsigned char cpu_load;
60 cpu_load = 0;
61
62 /*
63 * When not using nanosecond CPU usage resolution, we have to count
64 * the number of "ticks" we gave credit for to give the user a rough
65 * guideline as to what each number means proportionally.
66 */
67 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
68 _TOD_Get_uptime( &uptime );
69 _Timestamp_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total );
70 #else
71 for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
72 if ( !_Objects_Information_table[ api_index ] )
73 {
74 continue;
75 }
76 information = _Objects_Information_table[ api_index ][ 1 ];
77 if ( information )
78 {
79 for ( i=1 ; i <= information->maximum ; i++ ) {
80 the_thread = (Thread_Control *)information->local_table[ i ];
81
82 if ( the_thread )
83 total_units += the_thread->cpu_time_used;
84 }
85 }
86 }
87 #endif
88
89 for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ )
90 {
91 if ( !_Objects_Information_table[ api_index ] )
92 {
93 continue;
94 }
95 information = _Objects_Information_table[ api_index ][ 1 ];
96 if ( information )
97 {
98 the_thread = (Thread_Control *)information->local_table[ 1 ];
99
100 if ( !the_thread )
101 {
102 continue;
103 }
104
105 #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
106 /*
107 * If this is the currently executing thread, account for time
108 * since the last context switch.
109 */
110 ran = the_thread->cpu_time_used;
111 if ( _Thread_Executing->Object.id == the_thread->Object.id )
112 {
113 Timestamp_Control used;
114 _Timestamp_Subtract(
115 &_Thread_Time_of_last_context_switch, &uptime, &used
116 );
117 _Timestamp_Add_to( &ran, &used );
118 }
119 _Timestamp_Divide( &ran, &total, &ival, &fval );
120
121 #else
122 if (total_units)
123 {
124 uint64_t ival_64;
125
126 ival_64 = the_thread->cpu_time_used;
127 ival_64 *= 100000;
128 ival = ival_64 / total_units;
129 }
130 else
131 {
132 ival = 0;
133 }
134
135 fval = ival % 1000;
136 ival /= 1000;
137 #endif
138 }
139 }
140 cpu_load = (unsigned char) (100 - ival);
141
142 return cpu_load;
143 }
144
145
@@ -1,1 +1,1
1 b0a4fa20a3c7bd7e9ca1a1c4fda85d3269653bc8 src/basic_parameters
1 163519b5356a8bcd9197f504c31ad34b6233de38 src/basic_parameters
@@ -1,6 +1,6
1 1 #############################################################################
2 2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Fri May 16 07:58:47 2014
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Mon May 26 14:45:46 2014
4 4 # Project: fsw-qt.pro
5 5 # Template: app
6 6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -245,7 +245,8 obj/tm_lfr_tc_exe.o: ../src/tm_lfr_tc_ex
245 245 obj/tc_acceptance.o: ../src/tc_acceptance.c
246 246 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_acceptance.o ../src/tc_acceptance.c
247 247
248 obj/basic_parameters.o: ../src/basic_parameters/basic_parameters.c ../src/basic_parameters/basic_parameters.h
248 obj/basic_parameters.o: ../src/basic_parameters/basic_parameters.c ../src/basic_parameters/basic_parameters.h \
249 ../src/basic_parameters/basic_parameters_params.h
249 250 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/basic_parameters.o ../src/basic_parameters/basic_parameters.c
250 251
251 252 obj/fsw_processing.o: ../src/processing/fsw_processing.c
@@ -1,6 +1,6
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.0.1, 2014-05-16T15:09:51. -->
3 <!-- Written by QtCreator 3.0.1, 2014-05-26T06:56:48. -->
4 4 <qtcreator>
5 5 <data>
6 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -73,6 +73,7 void reset_nb_sm( void );
73 73 // SM
74 74 void SM_init_rings( void );
75 75 void SM_reset_current_ring_nodes( void );
76 void SM_generic_init_ring(ring_node_sm *ring, unsigned char nbNodes, volatile int sm_f[] );
76 77 // ASM
77 78 void ASM_generic_init_ring(ring_node_asm *ring, unsigned char nbNodes );
78 79 void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header);
@@ -283,6 +283,10 rtems_task dumb_task( rtems_task_argumen
283 283 coarse_time = time_management_regs->coarse_time;
284 284 fine_time = time_management_regs->fine_time;
285 285 printf("in DUMB *** coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
286 if (i==8)
287 {
288 PRINTF1("status = %x\n", spectral_matrix_regs->status)
289 }
286 290 }
287 291 }
288 292 }
@@ -436,7 +440,7 void send_dumb_hk( void )
436 440 PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES);
437 441 }
438 442
439 void get_v_e1_e2_f3( unsigned char *spacecraft_potential )
443 void get_v_e1_e2_f3_old( unsigned char *spacecraft_potential )
440 444 {
441 445 unsigned int coarseTime;
442 446 unsigned int acquisitionTime;
@@ -495,6 +499,65 void get_v_e1_e2_f3( unsigned char *spac
495 499 }
496 500 }
497 501
502 void get_v_e1_e2_f3( unsigned char *spacecraft_potential )
503 {
504 unsigned int coarseTime;
505 unsigned int acquisitionTime;
506 unsigned int deltaT = 0;
507 unsigned char *bufferPtr;
508
509 unsigned int offset_in_samples;
510 unsigned int offset_in_bytes;
511 unsigned char f3 = 16; // v, e1 and e2 will be picked up each second, f3 = 16 Hz
512
513 if (lfrCurrentMode == LFR_MODE_STANDBY)
514 {
515 spacecraft_potential[0] = 0x00;
516 spacecraft_potential[1] = 0x00;
517 spacecraft_potential[2] = 0x00;
518 spacecraft_potential[3] = 0x00;
519 spacecraft_potential[4] = 0x00;
520 spacecraft_potential[5] = 0x00;
521 }
522 else
523 {
524 coarseTime = time_management_regs->coarse_time & 0x7fffffff;
525 bufferPtr = (unsigned char*) current_ring_node_f3->buffer_address;
526 acquisitionTime = (unsigned int) ( ( bufferPtr[0] & 0x7f ) << 24 )
527 + (unsigned int) ( bufferPtr[1] << 16 )
528 + (unsigned int) ( bufferPtr[2] << 8 )
529 + (unsigned int) ( bufferPtr[3] );
530 if ( coarseTime > acquisitionTime )
531 {
532 deltaT = coarseTime - acquisitionTime;
533 offset_in_samples = (deltaT-1) * f3 ;
534 }
535 else if( coarseTime == acquisitionTime )
536 {
537 bufferPtr = (unsigned char*) current_ring_node_f3->previous->buffer_address; // pick up v e1 and e2 in the previous f3 buffer
538 offset_in_samples = NB_SAMPLES_PER_SNAPSHOT-1;
539 }
540 else
541 {
542 offset_in_samples = 0;
543 PRINTF2("ERR *** in get_v_e1_e2_f3 *** coarseTime = %x, acquisitionTime = %x\n", coarseTime, acquisitionTime)
544 }
545
546 if ( offset_in_samples > (NB_SAMPLES_PER_SNAPSHOT - 1) )
547 {
548 PRINTF1("ERR *** in get_v_e1_e2_f3 *** trying to read out of the buffer, counter = %d\n", offset_in_samples)
549 offset_in_samples = NB_SAMPLES_PER_SNAPSHOT -1;
550 }
551 offset_in_bytes = TIME_OFFSET_IN_BYTES + offset_in_samples * NB_WORDS_SWF_BLK * 4;
552 spacecraft_potential[0] = bufferPtr[ offset_in_bytes + 0];
553 spacecraft_potential[1] = bufferPtr[ offset_in_bytes + 1];
554 spacecraft_potential[2] = bufferPtr[ offset_in_bytes + 2];
555 spacecraft_potential[3] = bufferPtr[ offset_in_bytes + 3];
556 spacecraft_potential[4] = bufferPtr[ offset_in_bytes + 4];
557 spacecraft_potential[5] = bufferPtr[ offset_in_bytes + 5];
558 }
559 }
560
498 561 void get_cpu_load( unsigned char *resource_statistics )
499 562 {
500 563 unsigned char cpu_load;
@@ -248,6 +248,7 rtems_task prc0_task( rtems_task_argumen
248 248 incomingMsg = (asm_msg*) incomingData;
249 249
250 250 localTime = getTimeAsUnsignedLongLongInt( );
251
251 252 //****************
252 253 //****************
253 254 // BURST SBM1 SBM2
@@ -32,40 +32,65 ring_node_sm *ring_node_for_averaging_sm
32 32
33 33 rtems_isr spectral_matrices_isr( rtems_vector_number vector )
34 34 {
35 // ring_node_sm *previous_ring_node_sm_f0;
36
37 //// rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 );
38
39 // previous_ring_node_sm_f0 = current_ring_node_sm_f0;
35 //***
36 // F0
37 if ( (spectral_matrix_regs->status & 0x1) == 0x01) // check the status_ready_matrix_f0 bit
38 {
39 nb_sm_f0 = nb_sm_f0 + 1;
40 if (nb_sm_f0 == NB_SM_BEFORE_AVF0 )
41 {
42 ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
43 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
44 spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
45 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
46 {
47 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
48 }
49 nb_sm_f0 = 0;
50 }
51 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; // 1110
52 }
40 53
41 // if ( (spectral_matrix_regs->status & 0x2) == 0x02) // check ready matrix bit f0_1
42 // {
43 // current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
44 // spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
45 // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffd; // 1101
46 // nb_sm_f0 = nb_sm_f0 + 1;
47 // }
54 //***
55 // F1
56 if ( (spectral_matrix_regs->status & 0x4) == 0x04) // check the status_ready_matrix_f1 bit
57 {
58 nb_sm_f1 = nb_sm_f1 + 1;
59 if (nb_sm_f1 == NB_SM_BEFORE_AVF1 )
60 {
61 ring_node_for_averaging_sm_f1 = current_ring_node_sm_f1;
62 current_ring_node_sm_f1 = current_ring_node_sm_f1->next;
63 spectral_matrix_regs->matrixF1_Address = current_ring_node_sm_f1->buffer_address;
64 if (rtems_event_send( Task_id[TASKID_AVF1], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
65 {
66 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
67 }
68 nb_sm_f1 = 0;
69 }
70 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffb; // 1011
71 }
48 72
49 // //************************
50 // // reset status error bits
51 // if ( (spectral_matrix_regs->status & 0x30) != 0x00)
73 //***
74 // F2
75 if ( (spectral_matrix_regs->status & 0x8) == 0x08) // check the status_ready_matrix_f2 bit
76 {
77
78 ring_node_for_averaging_sm_f2 = current_ring_node_sm_f2;
79 current_ring_node_sm_f2 = current_ring_node_sm_f2->next;
80 spectral_matrix_regs->matrixF2_Address = current_ring_node_sm_f2->buffer_address;
81 if (rtems_event_send( Task_id[TASKID_AVF2], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
82 {
83 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
84 }
85 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffff7; // 0111
86 }
87
88 //************************
89 // reset status error bits
90 // if ( (spectral_matrix_regs->status & 0x3e0) != 0x00) // [0011 1110 0000] check the status bits
52 91 // {
53 92 // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 );
54 // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // 1100 1111
55 // }
56
57 // //**************************************
58 // // reset ready matrix bits for f0_0, f1 and f2
59 // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffff2; // 0010
60
61 // if (nb_sm_f0 == NB_SM_BEFORE_AVF0)
62 // {
63 // ring_node_for_averaging_sm_f0 = previous_ring_node_sm_f0;
64 // if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
65 // {
66 // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
67 // }
68 // nb_sm_f0 = 0;
93 // spectral_matrix_regs->status = spectral_matrix_regs->status | 0xfffffc1f; // [1100 0001 1111]
69 94 // }
70 95
71 96 }
@@ -198,6 +223,34 void SM_init_rings( void )
198 223 DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->matrixF0_Address0)
199 224 }
200 225
226 void SM_generic_init_ring( ring_node_sm *ring, unsigned char nbNodes, volatile int sm_f[] )
227 {
228 unsigned char i;
229
230 //***************
231 // BUFFER ADDRESS
232 for(i=0; i<nbNodes; i++)
233 {
234 ring[ i ].buffer_address = (int) &sm_f[ i * TOTAL_SIZE_SM ];
235 }
236
237 //*****
238 // NEXT
239 ring[ nbNodes - 1 ].next = (ring_node_sm*) &ring[ 0 ];
240 for(i=0; i<nbNodes-1; i++)
241 {
242 ring[ i ].next = (ring_node_sm*) &ring[ i + 1 ];
243 }
244
245 //*********
246 // PREVIOUS
247 ring[ 0 ].previous = (ring_node_sm*) &ring[ nbNodes -1 ];
248 for(i=1; i<nbNodes; i++)
249 {
250 ring[ i ].previous = (ring_node_sm*) &ring[ i - 1 ];
251 }
252 }
253
201 254 void ASM_generic_init_ring( ring_node_asm *ring, unsigned char nbNodes )
202 255 {
203 256 unsigned char i;
@@ -532,7 +532,7 int enter_mode( unsigned char mode, unsi
532 532 #endif
533 533 status = restart_science_tasks( mode );
534 534 launch_waveform_picker( mode, transitionCoarseTime );
535 launch_spectral_matrix( );
535 //launch_spectral_matrix( );
536 536 launch_spectral_matrix_simu( );
537 537 }
538 538 else if ( mode == LFR_MODE_STANDBY )
@@ -841,7 +841,7 int send_waveform_CWF3_light(volatile in
841 841 return ret;
842 842 }
843 843
844 void compute_acquisition_time( unsigned int coarseTime, unsigned int fineTime,
844 void compute_acquisition_time_old( unsigned int coarseTime, unsigned int fineTime,
845 845 unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char * acquisitionTime )
846 846 {
847 847 unsigned long long int acquisitionTimeAsLong;
@@ -915,6 +915,80 void compute_acquisition_time( unsigned
915 915
916 916 }
917 917
918 void compute_acquisition_time( unsigned int coarseTime, unsigned int fineTime,
919 unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char * acquisitionTime )
920 {
921 unsigned long long int acquisitionTimeAsLong;
922 unsigned char localAcquisitionTime[6];
923 double deltaT;
924
925 deltaT = 0.;
926
927 localAcquisitionTime[0] = (unsigned char) ( coarseTime >> 24 );
928 localAcquisitionTime[1] = (unsigned char) ( coarseTime >> 16 );
929 localAcquisitionTime[2] = (unsigned char) ( coarseTime >> 8 );
930 localAcquisitionTime[3] = (unsigned char) ( coarseTime );
931 localAcquisitionTime[4] = (unsigned char) ( fineTime >> 24 );
932 localAcquisitionTime[5] = (unsigned char) ( fineTime >> 16 );
933
934 acquisitionTimeAsLong = ( (unsigned long long int) localAcquisitionTime[0] << 40 )
935 + ( (unsigned long long int) localAcquisitionTime[1] << 32 )
936 + ( localAcquisitionTime[2] << 24 )
937 + ( localAcquisitionTime[3] << 16 )
938 + ( localAcquisitionTime[4] << 8 )
939 + ( localAcquisitionTime[5] );
940
941 switch( sid )
942 {
943 case SID_NORM_SWF_F0:
944 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 24576. ;
945 break;
946
947 case SID_NORM_SWF_F1:
948 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 4096. ;
949 break;
950
951 case SID_NORM_SWF_F2:
952 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 256. ;
953 break;
954
955 case SID_SBM1_CWF_F1:
956 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 4096. ;
957 break;
958
959 case SID_SBM2_CWF_F2:
960 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 256. ;
961 break;
962
963 case SID_BURST_CWF_F2:
964 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 256. ;
965 break;
966
967 case SID_NORM_CWF_F3:
968 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF_SHORT_F3 * 65536. / 16. ;
969 break;
970
971 case SID_NORM_CWF_LONG_F3:
972 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 16. ;
973 break;
974
975 default:
976 PRINTF1("in compute_acquisition_time *** ERR unexpected sid %d", sid)
977 deltaT = 0.;
978 break;
979 }
980
981 acquisitionTimeAsLong = acquisitionTimeAsLong + (unsigned long long int) deltaT;
982 //
983 acquisitionTime[0] = (unsigned char) (acquisitionTimeAsLong >> 40);
984 acquisitionTime[1] = (unsigned char) (acquisitionTimeAsLong >> 32);
985 acquisitionTime[2] = (unsigned char) (acquisitionTimeAsLong >> 24);
986 acquisitionTime[3] = (unsigned char) (acquisitionTimeAsLong >> 16);
987 acquisitionTime[4] = (unsigned char) (acquisitionTimeAsLong >> 8 );
988 acquisitionTime[5] = (unsigned char) (acquisitionTimeAsLong );
989
990 }
991
918 992 void build_snapshot_from_ring( ring_node *ring_node_to_send, unsigned char frequencyChannel )
919 993 {
920 994 unsigned int i;
@@ -1018,7 +1092,7 void build_snapshot_from_ring( ring_node
1018 1092 }
1019 1093 }
1020 1094
1021 void build_acquisition_time( unsigned long long int *acquisitionTimeAslong, ring_node *current_ring_node )
1095 void build_acquisition_time_old( unsigned long long int *acquisitionTimeAslong, ring_node *current_ring_node )
1022 1096 {
1023 1097 unsigned char *acquisitionTimeCharPtr;
1024 1098
@@ -1033,6 +1107,21 void build_acquisition_time( unsigned lo
1033 1107 + ( acquisitionTimeCharPtr[5] );
1034 1108 }
1035 1109
1110 void build_acquisition_time( unsigned long long int *acquisitionTimeAslong, ring_node *current_ring_node )
1111 {
1112 unsigned char *acquisitionTimeCharPtr;
1113
1114 acquisitionTimeCharPtr = (unsigned char*) current_ring_node->buffer_address;
1115
1116 *acquisitionTimeAslong = 0x00;
1117 *acquisitionTimeAslong = ( (unsigned long long int) (acquisitionTimeCharPtr[0] & 0x7f) << 40 ) // [0111 1111] mask the synchronization bit
1118 + ( (unsigned long long int) acquisitionTimeCharPtr[1] << 32 )
1119 + ( acquisitionTimeCharPtr[2] << 24 )
1120 + ( acquisitionTimeCharPtr[3] << 16 )
1121 + ( acquisitionTimeCharPtr[4] << 8 )
1122 + ( acquisitionTimeCharPtr[5] );
1123 }
1124
1036 1125 //**************
1037 1126 // wfp registers
1038 1127 void reset_wfp_burst_enable(void)
General Comments 0
You need to be logged in to leave comments. Login now