APM:Libraries
DataFlash_test.cpp
Go to the documentation of this file.
1 /*
2  * Example of DataFlash library.
3  * originally based on code by Jordi MuĂ’oz and Jose Julio
4  */
5 
6 #include <AP_HAL/AP_HAL.h>
7 #include <DataFlash/DataFlash.h>
9 #include <stdio.h>
10 
12 
13 #define LOG_TEST_MSG 1
14 struct PACKED log_Test {
16  uint16_t v1, v2, v3, v4;
17  int32_t l1, l2;
18 };
19 
20 static const struct LogStructure log_structure[] = {
22  { LOG_TEST_MSG, sizeof(log_Test),
23  "TEST",
24  "HHHHii",
25  "V1,V2,V3,V4,L1,L2",
26  "------",
27  "------"
28  }
29 };
30 
31 #define NUM_PACKETS 500
32 
33 static uint16_t log_num;
34 
36 public:
37  void setup();
38  void loop();
39 
40 private:
41 
42  AP_Int32 log_bitmask;
43  DataFlash_Class dataflash{"DF Test 0.1", log_bitmask};
44 
45 };
46 
48 
50 {
51  hal.console->printf("Dataflash Log Test 1.0\n");
52 
53  log_bitmask = (uint32_t)-1;
54  dataflash.Init(log_structure, ARRAY_SIZE(log_structure));
55  dataflash.set_vehicle_armed(true);
56  dataflash.Log_Write_Message("DataFlash Test");
57 
58  // Test
59  hal.scheduler->delay(20);
60 
61  // We start to write some info (sequentialy) starting from page 1
62  // This is similar to what we will do...
63  log_num = dataflash.find_last_log();
64  hal.console->printf("Using log number %u\n", log_num);
65  hal.console->printf("Writing to flash... wait...\n");
66 
67  uint32_t total_micros = 0;
68  uint16_t i;
69 
70  for (i = 0; i < NUM_PACKETS; i++) {
71  uint32_t start = AP_HAL::micros();
72  // note that we use g++ style initialisers to make larger
73  // structures easier to follow
74  struct log_Test pkt = {
76  v1 : (uint16_t)(2000 + i),
77  v2 : (uint16_t)(2001 + i),
78  v3 : (uint16_t)(2002 + i),
79  v4 : (uint16_t)(2003 + i),
80  l1 : (int32_t)(i * 5000),
81  l2 : (int32_t)(i * 16268)
82  };
83  dataflash.WriteBlock(&pkt, sizeof(pkt));
84  total_micros += AP_HAL::micros() - start;
85  hal.scheduler->delay(20);
86  }
87 
88  hal.console->printf("Average write time %.1f usec/byte\n",
89  (double)total_micros/((double)i*sizeof(struct log_Test)));
90 
91 #if CONFIG_HAL_BOARD == HAL_BOARD_SITL || CONFIG_HAL_BOARD == HAL_BOARD_LINUX
92  dataflash.flush();
93 #endif
94 
95  hal.scheduler->delay(100);
96 }
97 
99 {
100  hal.console->printf("\nTest complete.\n");
101  hal.scheduler->delay(20000);
102 }
103 
104 /*
105  compatibility with old pde style build
106  */
107 void setup(void);
108 void loop(void);
109 
110 void setup()
111 {
112  dataflashtest.setup();
113 }
114 
115 void loop()
116 {
117  dataflashtest.loop();
118 }
119 
120 const struct AP_Param::GroupInfo GCS_MAVLINK::var_info[] = {
122 };
124 
125 AP_HAL_MAIN();
static const struct LogStructure log_structure[]
void loop(void)
#define NUM_PACKETS
AP_HAL::UARTDriver * console
Definition: HAL.h:110
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
#define LOG_COMMON_STRUCTURES
int32_t l1
uint16_t v1
virtual void delay(uint16_t ms)=0
GCS_Dummy _gcs
int32_t l2
uint16_t v3
virtual void printf(const char *,...) FMT_PRINTF(2
Definition: BetterStream.cpp:5
static uint16_t log_num
uint16_t v2
AP_HAL_MAIN()
#define ARRAY_SIZE(_arr)
Definition: AP_Common.h:80
const HAL & get_HAL()
AP_Int32 log_bitmask
#define LOG_TEST_MSG
#define PACKED
Definition: AP_Common.h:28
uint16_t v4
void setup(void)
#define LOG_PACKET_HEADER_INIT(id)
Definition: LogStructure.h:8
static DataFlashTest dataflashtest
uint32_t micros()
Definition: system.cpp:152
#define AP_GROUPEND
Definition: AP_Param.h:121
AP_HAL::Scheduler * scheduler
Definition: HAL.h:114
AP_Int32 log_bitmask