Mercurial > public > mk2
comparison code_part1/OSTC_code_c_part2/p2_main.c @ 116:14a074e1a375
Split C code, and use direct linking.
| author | JeanDo |
|---|---|
| date | Sun, 26 Dec 2010 14:30:13 +0100 |
| parents | |
| children | cb055a7d75f3 |
comparison
equal
deleted
inserted
replaced
| 115:50a06adabc67 | 116:14a074e1a375 |
|---|---|
| 1 // ************************************************************** | |
| 2 // ** main code for simulation / tests without assembler code ** | |
| 3 // ** This is NOT a part of the OSTC ** | |
| 4 // ************************************************************** | |
| 5 | |
| 6 ////////////////////////////////////////////////////////////////////////////// | |
| 7 // OSTC - diving computer code | |
| 8 // Copyright (C) 2008 HeinrichsWeikamp GbR | |
| 9 // | |
| 10 // This program is free software: you can redistribute it and/or modify | |
| 11 // it under the terms of the GNU General Public License as published by | |
| 12 // the Free Software Foundation, either version 3 of the License, or | |
| 13 // (at your option) any later version. | |
| 14 // | |
| 15 // This program is distributed in the hope that it will be useful, | |
| 16 // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 // GNU General Public License for more details. | |
| 19 // | |
| 20 // You should have received a copy of the GNU General Public License | |
| 21 // along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 22 // | |
| 23 ////////////////////////////////////////////////////////////////////////////// | |
| 24 // history: | |
| 25 // 12/25/10 v110: [jDG] split in three files (deco.c, main.c, definitions.h) | |
| 26 | |
| 27 #include <p18f4685.h> | |
| 28 #include <stdlib.h> | |
| 29 | |
| 30 #include "p2_definitions.h" | |
| 31 | |
| 32 // ************************************************** | |
| 33 // ** Make sure to freeze ram banks used elsewhere ** | |
| 34 // ************************************************** | |
| 35 | |
| 36 #pragma udata bank0=0x060 | |
| 37 static const unsigned char keep_free_bank0[0xA0]; // used by the assembler code | |
| 38 | |
| 39 #pragma udata bank1=0x100 | |
| 40 static const unsigned char keep_free_bank1[256]; // used by the assembler code | |
| 41 | |
| 42 #pragma udata bank7=0x700 | |
| 43 const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display) | |
| 44 | |
| 45 // ******************************** | |
| 46 // ** C O N F I G U R A T I O N ** | |
| 47 // ** for simulation without asm ** | |
| 48 // ******************************** | |
| 49 #pragma config OSC = IRCIO67 | |
| 50 #pragma config FCMEN = OFF | |
| 51 #pragma config IESO = OFF | |
| 52 #pragma config PWRT = ON | |
| 53 #pragma config BOREN = OFF | |
| 54 #pragma config WDT = OFF | |
| 55 #pragma config WDTPS = 128 | |
| 56 #pragma config MCLRE = ON | |
| 57 #pragma config LPT1OSC = OFF | |
| 58 #pragma config PBADEN = OFF | |
| 59 #pragma config DEBUG = OFF | |
| 60 #pragma config XINST = OFF | |
| 61 #pragma config LVP = OFF | |
| 62 #pragma config STVREN = OFF | |
| 63 | |
| 64 // ************************* | |
| 65 // ** P R O T O T Y P E S ** | |
| 66 // ************************* | |
| 67 | |
| 68 void main(void); | |
| 69 | |
| 70 // ******************************* | |
| 71 // ** start ** | |
| 72 // ** necessary for compilation ** | |
| 73 // ******************************* | |
| 74 #pragma romdata der_code = 0x0000 | |
| 75 #pragma code der_start = 0x0000 | |
| 76 void der_start(void) | |
| 77 { | |
| 78 _asm | |
| 79 goto main | |
| 80 _endasm | |
| 81 } | |
| 82 | |
| 83 #pragma code main = 0x9000 | |
| 84 #pragma udata | |
| 85 void main(void) | |
| 86 { | |
| 87 static unsigned int i; | |
| 88 static unsigned int debug_temp; | |
| 89 | |
| 90 #if 1 | |
| 91 // new main to test DR-5 | |
| 92 | |
| 93 char_I_deco_model = 0; | |
| 94 | |
| 95 char_I_GF_Low_percentage = 100; | |
| 96 char_I_GF_High_percentage = 100; | |
| 97 | |
| 98 deco_clear_CNS_fraction(); | |
| 99 //char_I_const_ppO2 = 100; | |
| 100 //for (i=0;i<255;i++) | |
| 101 //{ | |
| 102 //calc_CNS_fraction(); | |
| 103 //} //for | |
| 104 | |
| 105 int_I_pres_respiration = 1000;//980; | |
| 106 int_I_pres_surface = 1000;//980; | |
| 107 char_I_N2_ratio = 79; //38; | |
| 108 char_I_He_ratio = 0; //50; | |
| 109 char_I_deco_distance = 10; // 10 = 1 meter | |
| 110 char_I_depth_last_deco = 3; // values below 3 (meter) are ignored | |
| 111 | |
| 112 char_I_const_ppO2 = 0; | |
| 113 char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter | |
| 114 char_I_deco_ppO2 = 0; | |
| 115 | |
| 116 char_I_deco_gas_change = 20; // [m] 1 = 1 meter | |
| 117 char_I_deco_N2_ratio = 50; | |
| 118 char_I_deco_He_ratio = 0; | |
| 119 | |
| 120 char_I_deco_gas_change2 = 6; // [m] 1 = 1 meter | |
| 121 char_I_deco_N2_ratio2 = 0; | |
| 122 char_I_deco_He_ratio2 = 0; | |
| 123 | |
| 124 char_I_deco_gas_change3 = 0; // [m] 1 = 1 meter | |
| 125 char_I_deco_gas_change4 = 0; // [m] 1 = 1 meter | |
| 126 char_I_deco_gas_change5 = 0; // [m] 1 = 1 meter | |
| 127 | |
| 128 //char_I_actual_ppO2; // 0x507 | |
| 129 char_I_GF_High_percentage = 100; // 0x514 new in v.102 | |
| 130 char_I_GF_Low_percentage = 100; // 0x515 new in v.102 | |
| 131 | |
| 132 char_I_saturation_multiplier = 110; | |
| 133 char_I_desaturation_multiplier = 90; | |
| 134 calc_hauptroutine_data_input(); | |
| 135 | |
| 136 deco_clear_tissue(); | |
| 137 | |
| 138 char_I_step_is_1min = 1; | |
| 139 int_I_pres_respiration = 4500 + int_I_pres_surface; | |
| 140 | |
| 141 for (i=0;i<29;i++) | |
| 142 { | |
| 143 deco_calc_hauptroutine(); | |
| 144 } | |
| 145 | |
| 146 char_I_step_is_1min = 0; | |
| 147 char_O_deco_status = 255; | |
| 148 while (char_O_deco_status) | |
| 149 deco_calc_hauptroutine(); | |
| 150 _asm | |
| 151 nop | |
| 152 _endasm | |
| 153 | |
| 154 char_O_deco_status = 255; | |
| 155 while (char_O_deco_status) | |
| 156 deco_calc_hauptroutine(); | |
| 157 _asm | |
| 158 nop | |
| 159 _endasm | |
| 160 | |
| 161 int_I_pres_respiration = 10000; | |
| 162 for (i=0;i<1500;i++) | |
| 163 { | |
| 164 deco_calc_hauptroutine(); | |
| 165 } | |
| 166 | |
| 167 _asm | |
| 168 nop | |
| 169 _endasm | |
| 170 | |
| 171 | |
| 172 int_I_pres_respiration = 3000; | |
| 173 for (i=0;i<150;i++) | |
| 174 { | |
| 175 calc_hauptroutine_data_input(); | |
| 176 calc_hauptroutine_update_tissues(); | |
| 177 } //for | |
| 178 | |
| 179 update_startvalues(); | |
| 180 clear_decoarray(); | |
| 181 clear_internal_deco_table_GF(); | |
| 182 calc_hauptroutine_calc_ascend_to_deco(); | |
| 183 if (char_O_deco_status > 15) // can't go up to first deco, too deep to calculate in the given time slot | |
| 184 { | |
| 185 char_O_deco_status = 2; | |
| 186 // char_O_lock_depth_list = 255; | |
| 187 } | |
| 188 else | |
| 189 { | |
| 190 // char_O_lock_depth_list = lock_GF_depth_list; | |
| 191 calc_hauptroutine_calc_deco(); | |
| 192 } | |
| 193 // build_debug_output(); | |
| 194 | |
| 195 _asm | |
| 196 nop | |
| 197 _endasm | |
| 198 while (char_O_deco_status == 1) | |
| 199 { | |
| 200 char_O_deco_status = 0; | |
| 201 // char_O_lock_depth_list = 255; | |
| 202 calc_hauptroutine_calc_deco(); | |
| 203 // build_debug_output(); | |
| 204 _asm | |
| 205 nop | |
| 206 _endasm | |
| 207 }; | |
| 208 debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min] | |
| 209 int_I_pres_respiration = 9980; | |
| 210 for (i=0;i<debug_temp;i++) | |
| 211 { | |
| 212 int_I_pres_respiration = int_I_pres_respiration - 33; | |
| 213 calc_hauptroutine_data_input(); | |
| 214 calc_hauptroutine_update_tissues(); | |
| 215 int_I_pres_respiration = int_I_pres_respiration - 33; | |
| 216 calc_hauptroutine_data_input(); | |
| 217 calc_hauptroutine_update_tissues(); | |
| 218 int_I_pres_respiration = int_I_pres_respiration - 34; | |
| 219 calc_hauptroutine_data_input(); | |
| 220 calc_hauptroutine_update_tissues(); | |
| 221 } //for | |
| 222 _asm | |
| 223 nop | |
| 224 _endasm | |
| 225 | |
| 226 update_startvalues(); | |
| 227 clear_decoarray(); | |
| 228 clear_internal_deco_table_GF(); | |
| 229 calc_hauptroutine_calc_ascend_to_deco(); | |
| 230 if (char_O_deco_status > 15) // can't go up to first deco, too deep to calculate in the given time slot | |
| 231 { | |
| 232 char_O_deco_status = 2; | |
| 233 // char_O_lock_depth_list = 255; | |
| 234 } | |
| 235 else | |
| 236 { | |
| 237 // char_O_lock_depth_list = lock_GF_depth_list; | |
| 238 calc_hauptroutine_calc_deco(); | |
| 239 } | |
| 240 // build_debug_output(); | |
| 241 | |
| 242 _asm | |
| 243 nop | |
| 244 _endasm | |
| 245 while (char_O_deco_status == 1) | |
| 246 { | |
| 247 char_O_deco_status = 0; | |
| 248 // char_O_lock_depth_list = 255; | |
| 249 calc_hauptroutine_calc_deco(); | |
| 250 // build_debug_output(); | |
| 251 _asm | |
| 252 nop | |
| 253 _endasm | |
| 254 }; | |
| 255 _asm | |
| 256 nop | |
| 257 _endasm | |
| 258 debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min] | |
| 259 int_I_pres_respiration = 9980; | |
| 260 debug_temp = debug_temp * 3; | |
| 261 for (i=0;i<debug_temp;i++) | |
| 262 { | |
| 263 calc_hauptroutine_data_input(); | |
| 264 calc_hauptroutine_update_tissues(); | |
| 265 } //for | |
| 266 _asm | |
| 267 nop | |
| 268 _endasm | |
| 269 #endif | |
| 270 // ----------------------- | |
| 271 | |
| 272 } // main |
