Нужна помощь в смещении массивов в скетче
- Войдите на сайт для отправки комментариев
Здравствуйте,столкнулся с проблемой неровного становления массивов в проекте генератор частоты на ардуино Версия 2.5 написана под микроконтроллер LGT8F328P.
Там от автора есть уточнение для корректного отображения сигналов проделать следующее Функция на ассемблере использует не стандартный способ чтения массива, записанного через PROGMEM Для этого способа требуется что бы расположение всех таблиц-массивов было кратно адресу 0x100 В ардуино нет штатных средств что бы положить конкретный массив по конкретному адресу во флэш область, поэтому пришлось обойти этот недостаток не очень красивым способом. Я создал специальный массив musor_mass, который занимает всё свободное место вплоть до адреса 0x100, а после него массивы с таблицами сами попадают точно на нужные адреса. Что бы компилятор не выбросил этот массив пришлось его как-то задействовать ( в строке 147 сетапа). При изменении в коде или при использовании версии ардуино отличной от 1.6.8 возможно потребуется изменение размера мусорного массива таким образом, что бы первый байт табличных массивов сел точно на адрес 0x100. Возможно в какой-то версии компилятора musor_mass нужно будет расположить в скетче не последним, а первым. После нажатия кнопки "проверить" лучше сразу заглянуть в скомпилившийся hex файл. Пример правильного расположения массивов на картинке. Но вот беда я ни как не могу сообразить как это сделать,может кто скоректирует у меня такой скетч /* Генератор с регулируемой частотой и скважностью v 2.5
/* Генератор с регулируемой частотой и скважностью v 2.5 * предназначен только для МК lgt8f328p * Распиновка: Энкодер пин A0,A1 (PC0,PC1) * Кнопка энкодера пин 2 (PD2) * Дисплей nokia 5110 - 13,12,11,10 (PB5,PB4,PB3,PB2) * Выход генератора DDS пин 4 (PD4) * Выход генератора PWM пин 9 (PB1) * Вход вольтметра пин A3 (ADC3) * Вход частотометра пин 5 (PD5) */ const PROGMEM uint8_t sinewave[]= // массив синуса { 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae, 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8, 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5, 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7, 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc, 0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3, 0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83, 0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51, 0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27, 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23, 0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c, 0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c }; const PROGMEM uint8_t squarewave[]= //массив меандра { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, }; const PROGMEM uint8_t trianglewave[]= //массив треугольника { 0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e, 0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e, 0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e, 0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e, 0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e, 0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe, 0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde, 0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe, 0xff,0xfd,0xfb,0xf9,0xf7,0xf5,0xf3,0xf1,0xef,0xef,0xeb,0xe9,0xe7,0xe5,0xe3,0xe1, 0xdf,0xdd,0xdb,0xd9,0xd7,0xd5,0xd3,0xd1,0xcf,0xcf,0xcb,0xc9,0xc7,0xc5,0xc3,0xc1, 0xbf,0xbd,0xbb,0xb9,0xb7,0xb5,0xb3,0xb1,0xaf,0xaf,0xab,0xa9,0xa7,0xa5,0xa3,0xa1, 0x9f,0x9d,0x9b,0x99,0x97,0x95,0x93,0x91,0x8f,0x8f,0x8b,0x89,0x87,0x85,0x83,0x81, 0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x6f,0x6f,0x6b,0x69,0x67,0x65,0x63,0x61, 0x5f,0x5d,0x5b,0x59,0x57,0x55,0x53,0x51,0x4f,0x4f,0x4b,0x49,0x47,0x45,0x43,0x41, 0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2f,0x2b,0x29,0x27,0x25,0x23,0x21, 0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x11,0x0f,0x0f,0x0b,0x09,0x07,0x05,0x03,0x01 }; const PROGMEM uint8_t sawtoothwave[]= //массив пила1 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff }; const PROGMEM uint8_t rewsawtoothwave[]= //массив пила2 { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0, 0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0, 0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xd0, 0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4,0xc3,0xc2,0xc1,0xc0, 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0, 0xaf,0xae,0xad,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3,0xa2,0xa1,0xa0, 0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90, 0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80, 0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70, 0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60, 0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50, 0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40, 0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30, 0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20, 0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10, 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, }; const PROGMEM char musor_mass[]= //массив для подгонки адреса в флэш-памяти { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; // пользовательские настройки переменных по умолчанию //режимы 0-синус dds, 1-треугольник dds, 2-меандр dds, 3 пила1 dds, 4 пила2 dds //5- гегулировка частоты pwm, 6- Duty pwm, 7-частотометр, 8 -вольтметр volatile uint8_t regim=5; //выбор режима генератора по умолчанию volatile int32_t freq=1000;// частота по умолчанию volatile uint16_t shag=100; //шаг энкодера по умолчанию #define dac_trim 5 // настройка выходного уровня ЦАП // 0 -переменный резистор на пине aref, 1 -1.024V; 2-2.048v; 4-4.096V; 5-Vcc #define F_CPU 32E6 //нужно указать фактическую частоту МК volatile uint16_t int_tic=0;//переменная частотометра (переполнение таймера) uint16_t Vbg, involt;//переменные вольтметра volatile uint32_t icr=0; //переменная для управления регистром сравнения таймера1 volatile uint8_t monitor_flag; // флаг для вывода на дисплей volatile uint8_t duty=50; //скважность по умолчанию //volatile uint8_t main_flag=0;//флаг работа в режиме генератора или нет volatile uint8_t modebit=1;//флаг смены режимов.(для анализа действия энкодера) #include "lgtx8p.h" #define int_on() PCMSK1=(1<<PCINT9); PCICR=(1<<PCIE1); EIMSK=1<<INT0; //прерывание на А1 //включить прерывание PCINT1, выбор пинов прерывания A1, #define int_off() PCMSK1=0; PCICR=0; EIMSK=0; ///отключить прерывания энкодера и кнопки #include <LCD5110_SSVS.h> #include <avr/delay.h> extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; LCD5110 lcd(10,11,12,13); // DDS algorithm static inline void signalOUT(uint16_t ad01,uint8_t ad2, const uint8_t *wvt){ asm volatile( "ldi r28,0xA1; " "\n\t" "clr r29;" "\n\t" "eor r18, r18;" "\n\t" "eor r19, r19;" "\n\t" "1:" "\n\t" "add r18, %A0;" "\n\t" "adc r19, %B0;" "\n\t" "adc %A2, %1;" "\n\t" "lpm ;" "\n\t" "st Y, __tmp_reg__ ;" "\n\t" "sbis %3, 7 ;" "\n\t" "rjmp 1b;" "\n\t" ::"r" (ad01),"r" (ad2),"e" (wvt), "I" (_SFR_IO_ADDR(PORTF)) :"r18", "r19","r28", "r29" ); } void setup(){ lcd.InitLCD(); for (int n=0; n <sizeof(musor_mass); n++ ) {PORTF=musor_mass[n]&0xFC; } pinMode(A0,INPUT_PULLUP); //encoder pinMode(A1,INPUT_PULLUP); // encoder pinMode(2,INPUT_PULLUP); //encoder key pinMode(3,OUTPUT);// buzzer TCCR1A=0; TCCR1B=0; TIMSK1=0; EICRA=3; //INT0 -RISING+FALLING EIFR==EIFR; //flag clear TCCR0B=0; check_regim(); //разгон до 32 МГц от внутреннего RC генератора CLKPR = 1<<PMCE;//разрешить изменение CLKPR = 0; //делитель =1 } //end setup /////////////// ПРЕРЫВАНИЕ от кн0пки////////////////////////// ISR (INT0_vect){ // прерывание от кнопки энкодера int_off(); if ( (TIFR3&(1<<0))==0 ){TIFR3|=1<<0;} // флаг выходы из режима частотометра if (!modebit) { modebit=1; int_on(); return;} //меняли режим, просто выйти if (regim==6) { regim=5; check_regim(); return; } switch (shag){ case 1: shag=10; break; case 10: shag=100; break; case 100: shag=1000; break; case 1000: shag=1; break; } check_regim(); return; } //конец прерывания *если нажата кнопка энкодера* //////////////////////////////////////////////////////////// ISR (PCINT1_vect){ //прерывание при вращении энкодера // static boolean n=0; if (n=!n){return;} // снять ремарку для энкодеров с двойным щелчком int_off(); bool x = (PINC&1)^((PINC&2)>>1); if ( (TIFR3&(1<<0))==0 ){TIFR3|=1<<0;} // флаг выхода из режима частотометра //////////////////// переключение режимов при нажатой кнопке////////////////////// modebit= (PIND&(1<<2)); //0 -кнопка нажата. 1 -не нажата if (!modebit) { //если кнопка нажата //флаг что переключаю режимы if (x) { regim++; if (regim>8) {regim=0;} } else {regim-- ; if (regim>8) {regim=8;}} check_regim(); return; } ////////////////// переключение частоты///////////////////////////////////////// if (TCCR1B==17 && ICR1<2800 && regim==5){ //если > 2800 герц if(x) {if (icr<1000 && shag > 100) shag=100; if (icr<100 && shag > 10) shag=10; if (icr<10 && shag > 1) shag=1; icr-=shag; if (icr<2) icr=2; }//ограничитель else { if (icr > 1800 && shag >100) shag =100; icr+=shag ; } check_regim(); return; } ///////////////////////////переключение Duty////////////////////////////////// if (regim==6){if (ICR1>100){ if (x){if(duty<100) {duty++; } } if (!x){ if(duty>0) {duty--; }} } else{ if (x){if(OCR1A<ICR1) {OCR1A++; } } else {if(OCR1A>0) {OCR1A--; } } if(OCR1A>ICR1) OCR1A=ICR1-1; duty=(uint32_t)100*OCR1A/ICR1; } check_regim(); return; } // end перекл. duty x? freq+=shag : freq-=shag ; //изменение частоты менее 2800 Герц if (freq < 1) freq=1; check_regim(); } // end isr pcint void pwm_gen(){ //настройка таймера1 uint16_t divider=1; icr = (uint32_t)(F_CPU / freq /2 /divider); byte shifts[] = {3,3,2,2}; for(byte i = 0; i < 4; i++){ if (icr > 65536) { divider <<= shifts[i]; icr = (uint32_t)F_CPU / freq /2 /divider; } else { TCCR1B = (i+1)|(1<<WGM13); break; } } ICR1=icr-1; set_duty(); } //end pwm_gen void loop() { if (regim <5){ dds_set();} if (regim==7) {freq_meter();} if (regim==8) {volt_meter();} if (monitor_flag) { monitor_flag=0; monitor_out(); } }//end loop void monitor_out(){ char mystr[14];//массив для вывода строк на дисплей lcd.clrScr(); //Вывод первой строчки lcd.setFont(SmallFont); if (regim<8){ if (freq <1E4) {lcd.print("Frequency, Hz",CENTER,0 ); } if (freq >=1E4) {lcd.print("Frequency, kHz",CENTER,0 ); } } if (regim==8){lcd.print("Voltage, Volt",CENTER,0 ); } //Вывод второй строчки lcd.setFont(MediumNumbers); if (regim<8){ if (freq <10000) { lcd.printNumI(freq, CENTER, 8); } if (freq >=10000u && freq < 1000000ul ) { lcd.printNumF( ((float)freq/1000),3 ,CENTER, 8); } if (freq >=1000000ul ) { lcd.printNumF( ((float)freq/1000),2 ,CENTER, 8); } } if (regim==8){ lcd.printNumF( ((float)involt/1000),3 ,CENTER, 8); } //Вывод третьей строчки lcd.setFont(SmallFont); switch(regim){ case 0: lcd.print("Sinus DDS",CENTER, 32); break; case 1: lcd.print("Triangle DDS",CENTER, 32); break; case 2: lcd.print("Meandr DDS",CENTER, 32); break; case 3: lcd.print("Pila1 DDS",CENTER, 32); break; case 4: lcd.print("Pila2 DDS",CENTER, 32); break; case 5: lcd.print("PWM Mode",CENTER,32); break; case 6: lcd.print("Duty Mode", CENTER, 32);break; case 7: lcd.print("Freq counter", CENTER, 32);break; case 8: lcd.print("Volt meter", CENTER, 32); } //Вывод четвёртой строчки if (regim==6) { sprintf(mystr, "Duty=%d %%", duty); lcd.print(mystr, CENTER, 40);} else if (regim < 6) {sprintf(mystr, "Step=%d", shag); lcd.print(mystr, CENTER, 40);} if (regim==8){ sprintf(mystr, "Vcc= %d.%02d v", (int)(Vbg/1000), (int)Vbg%1000 ); lcd.print(mystr, CENTER, 40); }//end if regim 8 } //end monitor out void set_duty(){ if (regim==6&&ICR1<100) return; if (regim==5 && ICR1<100){ OCR1A=ICR1/2; duty=50; return; } static uint16_t ocr; ocr=(uint32_t)ICR1*duty/100; OCR1A=ocr; } void check_regim(){// проверка и установка режимов работы if (regim <5){ // если DDS режимы: if (freq > 100000) { freq=100000;} TCCR1B=0; TCCR1A=0; DDRB&=~(1<<DDB1); // 9 pin arduino set Z-mode }// end if regim <5 if (regim==5 || regim==6) {// если PWM или Duty TCCR1A=1<<COM1A1; DDRB|=1<<DDB1; // 9 pin set output (pwm out) if (TCCR1B==17 && ICR1<2800){ ICR1=icr; freq= F_CPU/2/ICR1; set_duty(); } else { pwm_gen(); } } PORTF|= 1<<7; //поставить флаг что-б выйти из цикла DDS, если были в цикле if (regim==7){ freq=0;} //если частотометр то обнулить частоту monitor_flag=1; int_on() } ISR (TIMER1_OVF_vect){ int_tic++; } // прерывание частотомера void freq_meter(){ //подготовка таймера1 TCCR1B=0; TCCR1A=0; TIMSK1 = 1<<TOIE1;// подключить прерывание int_tic=0; TCNT1=0; TIFR1=TIFR1;//всё обнулить //подготовка таймера3 TCCR3B=0;TCCR3A=0; TIFR3=TIFR3; //все 3 регистра стравнения что б удобнее смотреть регистр флагов uint16_t ocr = ( (uint32_t)F_CPU/1024) -1; OCR3AH=ocr>>8; OCR3AL=ocr;// -2 sec OCR3BH=ocr>>8; OCR3BL=ocr;// -2 sec OCR3CH=ocr>>8; OCR3CL=ocr;// -2 sec TCCR3B=5<<CS30; //старт счёта 2х секунд TCCR1B=7<<CS10;//старт счёта таймера1 от тактового входа while(TIFR3==0);// крутится пока не будет флагов конца счёта TCCR1B=0;// стоп Тimer1 TIMSK1=0; if ( (TIFR3&(1<<0))==0){// если не было переполнения, то считаем freq= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало int_tic=0; TCNT1 = 0; } monitor_flag=1; } //////////////////////ВОЛЬТМЕТР///////////////////////////////// void volt_meter() { Vbg=Vbg_read();//измерить напряжение на Vcc involt=auto_range_read(3);//измерить на входе А3 monitor_flag=1; }//end volt meter // функция для измерения напряжения с автоматическим переключением референса uint16_t auto_range_read(uint8_t in){ uint16_t an_in; an_in= _adc(in,3);//вкючение референса 1024 if (an_in <=(800*4)) {return (an_in/4);} an_in= _adc(in,2); //вкючение референса 2048 if (an_in <=(1800*2)) {return (an_in/2); } an_in=_adc(in,4); //вкючение референса 4096 if (an_in <3800) {return an_in; } an_in= _adc(in,1); an_in= (uint32_t)an_in * Vbg / 4096; return an_in; } ////// analog Read (input, reference) uint16_t _adc( uint8_t in, uint8_t refs){ uint16_t adc; ADCSRA=1<<ADEN | 1<<ADPS2 |0<<ADPS1 |1<<ADPS0; // clk /32 ADCSRB=0; ADCSRC=0; DIDR0=1<<in; switch(refs) { //0 -ext, 1-Vcc, 2-2048, 3-1024, 4-4096 case 0: ADCSRD=0; break; // AREF ничего не меняется, REFS=0 case 1: ADCSRD=0;break; // VCC ничего не меняется, REFS=1 case 2: ADCSRD=0; VCAL=VCAL2; break; // 2v048 case 3: ADCSRD=0; VCAL=VCAL1; break; // 1v1024 case 4: refs=0; ADCSRD=1<<REFS2; VCAL=VCAL3; break; // 4v096 } ADMUX=in&0xF | refs<<6; uint32_t akkum=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA |= (1<<ADSC); while (ADCSRA&(1<<ADSC)); akkum += ADC; } akkum>>=8; return (uint16_t)akkum; } //функция для измерения напряжения на Vcc uint16_t Vbg_read(){ ADCSRB=0; ADCSRC=0; ADCSRA=1<<ADEN | 1<<ADPS2 |0<<ADPS1 |1<<ADPS0; // adc enable , clk/32 ADMUX=1<<REFS0 | 1<<3 | 1<<2 | 1<<0; //ref=avcc, input= ivref ADCSRD=1<<BGEN ; //ivref=1v024 VCAL=VCAL1;//load 1v024 calibrate byte uint32_t bgaread=0; //собрать 256 семплов для усреднения for (int n=0x0; n<=0xff; n++ ) { ADCSRA |= (1<<ADSC); while (bit_is_set(ADCSRA,ADSC)); bgaread += ADC; } bgaread>>=8; bgaread= ((uint32_t)1024<<12) / bgaread; return (uint16_t)bgaread; } void dds_set(){ PORTF&= ~(1<<7); //флаг DDS switch (dac_trim) { case 0: DACON=1<<DACEN|1<<DAOE|1<<DAVS0; break; case 1: DACON=1<<DACEN|1<<DAOE|1<<DAVS1; ADCSRD= 1<BGEN; break; case 2: DACON=1<<DACEN|1<<DAOE|1<<DAVS1; ADCSRD= 1<BGEN|1<<IVSEL0; break; case 4: DACON=1<<DACEN|1<<DAOE|1<<DAVS1; ADCSRD= 1<BGEN|1<<IVSEL1; break; case 5: DACON= 1<<DACEN | 1<<DAOE; break; } uint32_t temp= (float)0x1000000ul / (F_CPU/8ul) * freq; switch (regim){ case 0: signalOUT(temp, temp>>16,sinewave); break; case 1: signalOUT(temp, temp>>16,trianglewave); break; case 2: signalOUT(temp, temp>>16,squarewave); break; case 3: signalOUT(temp, temp>>16,sawtoothwave); break; case 4: signalOUT(temp, temp>>16,rewsawtoothwave); } //end switch }
А получается такой Hex
:100000000C9465050C9424090C9499050C9499059D :100010000C9484090C9499050C9499050C949905F9 :100020000C9499050C9499050C9499050C949905D8 :100030000C9499050C94560B0C9499050C94990505 :100040000C9402110C9499050C9499050C94990543 :100050000C9499050C9499050C9499050C949905A8 :100060000C9499050C949905D406D706DA06DD069A :10007000E006E306E606E906EC0600407A10F35ACD :1000800000A0724E18090010A5D4E80000E87648D8 :10009000170000E40B54020000CA9A3B000000E184 :1000A000F505000080969800000040420F00000017 :1000B000A08601000000102700000000E8030000F7 :1000C00000006400000000000A00000000000100C1 :1000D000000000002C76D888DC674F0823DFC1DFE2 :1000E000AE59E1B1B796E5E3E453C63AE6519976E5 :1000F00096E8E6C28426EB898C9B62ED407C6FFC1F :10010000EFBC9C9F40F2BAA56FA5F490055A2AF760 :100110005C936B6CF9676DC11BFCE0E40D47FEF569 :1001200020E6B500D0ED902E0300943577050080D1 :10013000841E080000204E0A000000C80C33333330 :10014000330F986E12831141EF8D2114893BE655D0 :1001500016CFFEE6DB18D1844B381BF77C1D901DB3 :10016000A4BBE424203284725E228100C9F124EC15 :10017000A1E53D2700000000000000000000000095 :10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF :10020000FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F076 :10021000EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E066 :10022000DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D056 :10023000CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C046 :10024000BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B036 :10025000AFAEADACABAAA9A8A7A6A5A4A3A2A1A026 :100260009F9E9D9C9B9A9998979695949392919016 :100270008F8E8D8C8B8A8988878685848382818006 :100280007F7E7D7C7B7A79787776757473727170F6 :100290006F6E6D6C6B6A69686766656463626160E6 :1002A0005F5E5D5C5B5A59585756555453525150D6 :1002B0004F4E4D4C4B4A49484746454443424140C6 :1002C0003F3E3D3C3B3A39383736353433323130B6 :1002D0002F2E2D2C2B2A29282726252423222120A6 :1002E0001F1E1D1C1B1A1918171615141312111096 :1002F0000F0E0D0C0B0A0908070605040302010086 :10030000000102030405060708090A0B0C0D0E0F75 :10031000101112131415161718191A1B1C1D1E1F65 :10032000202122232425262728292A2B2C2D2E2F55 :10033000303132333435363738393A3B3C3D3E3F45 :10034000404142434445464748494A4B4C4D4E4F35 :10035000505152535455565758595A5B5C5D5E5F25 :10036000606162636465666768696A6B6C6D6E6F15 :10037000707172737475767778797A7B7C7D7E7F05 :10038000808182838485868788898A8B8C8D8E8FF5 :10039000909192939495969798999A9B9C9D9E9FE5 :1003A000A0A1A2A3A4A5A6A7A8A9AAABACADAEAFD5 :1003B000B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC5 :1003C000C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFB5 :1003D000D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFA5 :1003E000E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF95 :1003F000F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF85 :1004000000020406080A0C0E10121416181A1C1EFC :1004100020222426282A2C2E30323436383A3C3EEC :1004200040424446484A4C4E50525456585A5C5EDC :1004300060626466686A6C6E70727476787A7C7ECC :1004400080828486888A8C8E90929496989A9C9EBC :10045000A0A2A4A6A8AAACAEB0B2B4B6B8BABCBEAC :10046000C0C2C4C6C8CACCCED0D2D4D6D8DADCDE9C :10047000E0E2E4E6E8EAECEEF0F2F4F6F8FAFCFE8C :10048000FFFDFBF9F7F5F3F1EFEFEBE9E7E5E3E16A :10049000DFDDDBD9D7D5D3D1CFCFCBC9C7C5C3C15A :1004A000BFBDBBB9B7B5B3B1AFAFABA9A7A5A3A14A :1004B0009F9D9B99979593918F8F8B89878583813A :1004C0007F7D7B79777573716F6F6B69676563612A :1004D0005F5D5B59575553514F4F4B49474543411A :1004E0003F3D3B39373533312F2F2B29272523210A :1004F0001F1D1B19171513110F0F0B0907050301FA :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB :1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B :10058000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B :10059000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B :1005A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B :1005B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B :1005C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B :1005D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B :1005E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B :1005F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B :10060000808386898C8F9295989C9FA2A5A8ABAE7B :10061000B0B3B6B9BCBFC1C4C7C9CCCED1D3D5D88D :10062000DADCDEE0E2E4E6E8EAECEDEFF0F2F3F546 :10063000F6F7F8F9FAFBFCFCFDFEFEFFFFFFFFFFFB :10064000FFFFFFFFFFFFFEFEFDFCFCFBFAF9F8F7E2 :10065000F6F5F3F2F0EFEDECEAE8E6E4E2E0DEDCFA :10066000DAD8D5D3D1CECCC9C7C4C1BFBCB9B6B313 :10067000B0AEABA8A5A29F9C9895928F8C898683DB :10068000807C797673706D6A6763605D5A575451E8 :100690004F4C494643403E3B383633312E2C2A27B7 :1006A0002523211F1D1B1917151312100F0D0C0ADE :1006B0000908070605040303020101000000000009 :1006C0000000000000000101020303040506070802 :1006D000090A0C0D0F1012131517191B1D1F2123CA :1006E00025272A2C2E313336383B3E404346494C91 :1006F0004F5154575A5D6063676A6D707376797CA9 :100700000C102D0D00000080808080808000000093 :1007100000000103030303030301000000000000C5 :1007200000000000000000000000000000C0C00049 :100730000000000000000286868686868602000091 :10074000000081C3C3C3C3C3C381000000FC7A0699 :1007500006060606067AFC00007EBCC0C0C0C0C00B :10076000C0BC7E0000000000000000000078FC001B :100770000000000000000000003C7E000000028637 :1007800086868686867AFC00007EBDC3C3C3C3C34B :10079000C38100000000028686868686867AFC0079 :1007A000000081C3C3C3C3C3C3BD7E0000FC788007 :1007B000808080808078FC00000001030303030335 :1007C000033D7E0000FC7A868686868686020000CF :1007D000000081C3C3C3C3C3C3BD7E0000FC7A86CF :1007E0008686868686020000007EBDC3C3C3C3C35F :1007F000C3BD7E000000020606060606067AFC005F :100800000000000000000000003C7E0000FC7A8632 :1008100086868686867AFC00007EBDC3C3C3C3C3BA :10082000C3BD7E0000FC7A8686868686867AFC00BA :10083000000081C3C3C3C3C3C3BD7E000608205FDD :100840000000000000000000002F00000000070072 :10085000070000147F147F1400242A7F2A1200232B :100860001308646200364955225000000503000059 :1008700000001C224100000041221C000014083E20 :1008800008140008083E0808000000A060000008E6 :10089000080808080000606000000020100804023A :1008A000003E5149453E0000427F400000426151F8 :1008B0004946002141454B31001814127F10002792 :1008C00045454539003C4A49493000017109050355 :1008D00000364949493600064949291E0000363686 :1008E00000000000563600000008142241000014E9 :1008F00014141414000041221408000201510906C6 :1009000000324959513E007C1211127C007F494946 :100910004936003E41414122007F4141221C007F77 :1009200049494941007F09090901003E4149497A85 :10093000007F0808087F0000417F410000204041FF :100940003F01007F08142241007F40404040007F6B :10095000020C027F007F0408107F003E4141413EAF :10096000007F09090906003E4151215E007F0919F7 :1009700029460046494949310001017F0101003FF4 :100980004040403F001F2040201F003F4038403F74 :1009900000631408146300070870080700615149D8 :1009A000454300007F414100AA55AA55AA550000C1 :1009B00041417F00000402010204004040404040E9 :1009C000000003050000002054545478007F484480 :1009D000443800384444442000384444487F0038B8 :1009E0005454541800087E0901020018A4A4A47CE1 :1009F000007F080404780000447D400000408084AB :100A00007D00007F102844000000417F4000007CF2 :100A100004180478007C08040478003844444438FE :100A200000FC242424180018242418FC007C08044A :100A3000040800485454542000043F444020003C23 :100A40004040207C001C2040201C003C4030403CAA :100A5000004428102844001CA0A0A07C004464543A :100A60004C440000107C8200000000FF00000000E9 :100A7000827C10000000060909060102040810200B :100A8000408001020408102001020408102002081E :100A900001041020400404040404040404020202BB :100AA000020202030303030303050505050505050B :100AB00000000000250028002B00A9000000000015 :100AC000240027002A00A800090D11241FBECFEF23 :100AD000D8E0DEBFCDBF14BE0FB6F894A8958091C4 :100AE0006000886180936000109260000FBE11E08A :100AF000A0E0B1E0EEE1F4E302C005900D92AC3B62 :100B0000B107D9F721E0ACEBB1E001C01D92A83EDE :100B1000B207E1F715E0C5E6D5E004C02197FE0174 :100B20000E94BC14C436D107C9F70E9473120C94FA :100B30000D1A0C940000CF93DF93FA01C1EADD2770 :100B400022273327280F391FE61FC8950882A79B45 :100B5000F9CFDF91CF9108958F92AF92BF92CF924C :100B6000DF92EF92FF920F931F93CF93DF93CDB756 :100B7000DEB72E970FB6F894DEBF0FBECDBF8CEB5D :100B800091E00E94340E6CE378E08CEB91E00E94DF :100B9000E41080910801883008F040C060910401A1 :100BA0007091050180910601909107010E94311317 :100BB00020E030E44CE156E40E94821287FF0EC030 :100BC00030E2E32E00E010E020E030E04EE057E2BB :100BD0006DE071E08CEB91E00E94F80E60910401F1 :100BE0007091050180910601909107010E943113D7 :100BF00020E030E44CE156E40E94E11387FD0EC092 :100C000020E2E22E00E010E020E030E04EE057E28B :100C10006BE171E08CEB91E00E94F80E809108018D :100C2000883071F490E2E92E00E010E020E030E03E :100C30004EE057E26AE271E08CEB91E00E94F80E20 :100C400060E077E08CEB91E00E94E4108091080175 :100C5000883008F06BC08091040190910501A0914B :100C60000601B091070180319742A105B105A4F4B6 :100C700040910401509105016091060170910701B6 :100C800080E2C82EE12CF12C08E010E02EE037E2E3 :100C90008CEB91E00E946A0F809104019091050114 :100CA000A0910601B091070180319742A105B105DD :100CB00074F08091040190910501A0910601B0911A :100CC000070180349244AF40B10508F4F3C080912D :100CD000040190910501A0910601B09107018034B3 :100CE0009244AF40B10510F160910401709105018B :100CF00080910601909107010E94311320E030E0BD :100D00004AE754E40E948712AB01BC01B0E28B2E8B :100D1000A12CB12C1EE2C12E08E0E02EF12C0EE039 :100D200017E222E08CEB91E00E945B1080910801B9 :100D3000883001F56091D9017091DA0180E090E08E :100D40000E942F1320E030E04AE754E40E9487120B :100D5000AB01BC01E0E28E2EA12CB12CFEE2CF2E25 :100D6000A8E0EA2EF12C0EE017E223E08CEB91E0F4 :100D70000E945B106CE378E08CEB91E00E94E41041 :100D8000E09108018E2F90E08930910558F5FC0123 :100D9000EC5CFF4F50E2E52E00E010E020E230E096 :100DA0004EE057E20C94BC1468E371E017C062E4B3 :100DB00071E014C06FE471E011C06AE571E00EC02B :100DC00064E671E00BC06EE671E008C067E771E0B1 :100DD00005C061E871E002C06EE871E08CEB91E063 :100DE0000E94F80E80910801863039F4809101014B :100DF0001F928F9389E991E00CC0809108018630A1 :100E000020F580910201909103019F938F9384EAD2 :100E100091E09F938F93CE0101966C019F938F93E6 :100E20000E94F11440E2E42E00E010E028E230E0FD :100E30004EE057E2B6018CEB91E00E94F80E0F9065 :100E40000F900F900F900F900F90809108018830B5 :100E500009F053C0E091DB01F091DC0128EE33E0B2 :100E6000CF01B9010E9467149F938F93CF01B901FD :100E70000E9453147F936F938CEA91E09F938F931A :100E8000CE0101966C019F938F930E94F11430E282 :100E9000E32E00E010E028E230E04EE057E2B60139 :100EA0008CEB91E00E94F80E0FB6F894DEBF0FBEF7 :100EB000CDBF23C0609104017091050180910601AE :100EC000909107010E94311320E030E04AE754E49A :100ED0000E948712AB01BC0180E2882EA12CB12CAC :100EE0009EE2C92E28E0E22EF12C0EE017E223E06C :100EF0008CEB91E00E945B10EACE2E960FB6F89430 :100F0000DEBF0FBECDBFDF91CF911F910F91FF903C :100F1000EF90DF90CF90BF90AF908F900895809129 :100F20000801863039F480918600909187008436DC :100F3000910560F1809108018530A9F480918600C7 :100F4000909187008436910570F48091860090918D :100F5000870096958795909389008093880082E317 :100F6000809301010895A0918600B091870020919F :100F7000010130E00E94C21424E630E040E050E07D :100F80000E947B14309389002093880008954F922B :100F90005F926F927F928F929F92AF92BF92CF9209 :100FA000DF92EF92FF921F93CF93DF9300D000D098 :100FB000CDB7DEB760910401709105018091060103 :100FC000909107010E9431139B01AC0160E074E233 :100FD00084EF9BE40E94871220E030E040E05FE372 :100FE0000E94E6130E9400136093D5017093D6010E :100FF0008093D7019093D8018091090190910A01C3 :10100000A0910B01B0910C0189839A83AB83BC83BF :10101000CE0101966C0180E0EE24E394F12C812C4A :1010200024E2922E24EFA22EB12C4091D5015091B2 :10103000D6016091D7017091D80111E0180F4130AD :1010400051056140710548F1F601019002C0EE0CB6 :10105000FF1C0A94E2F76F01209104013091050111 :101060004091060150910701C501B4010E947B1413 :101070002701612C712CCA01B901A30192010E94C0 :101080007B142093D5013093D6014093D701509320 :10109000D801812F143049F604C0812F80618093DC :1010A00081008091D5019091D601A091D701B09196 :1010B000D801019790938700809386000F900F903E :1010C0000F900F90DF91CF911F91FF90EF90DF90E5 :1010D000CF90BF90AF909F908F907F906F905F90D8 :1010E0004F900C948F07809108018530F0F4809127 :1010F000040190910501A0910601B0910701813A88 :101100009648A140B10564F080EA96E8A1E0B0E01D :101110008093040190930501A0930601B093070109 :1011200010928100109280002198809108018530F2 :1011300021F0809108018630C9F580E88093800015 :10114000219A80918100813109F047C08091860009 :1011500090918700803F9A4008F03FC08091D50170 :101160009091D601A091D701B091D80190938700BA :1011700080938600609186007091870080E090E007 :101180000E942F139B01AC0160E074E284E79BE4B2 :101190000E9487120E94F912609304017093050166 :1011A00080930601909307010E948F07A79A809170 :1011B0000801873041F41092040110920501109249 :1011C00006011092070181E08093D40192E0909390 :1011D0006C00909368008DBB08950E94C707E6CF0E :1011E00066E470E08CEB91E00E94BB0DE4E7F1E077 :1011F00082E0E030F80721F081918C7F84BBF8CF4A :1012000062E08EE00E94D21162E08FE00E94D21173 :1012100062E082E00E94D21161E083E00E94D2117C :10122000109280001092810010926F0083E08093F2 :1012300069008CB38CB315BC0E94730880E880935E :1012400061001092610008951F920F920FB60F92E5 :1012500011242F933F934F935F936F937F938F93BB :101260009F93AF93BF93EF93FF9310926C001092F4 :1012700068001DBAC09BC09A8091000181110AC00C :1012800081E08093000192E090936C00909368005D :101290008DBB29C080910801863021F485E08093C0 :1012A00008011FC080910201909103018A309105CD :1012B00079F028F40197A9F48AE090E00EC0843612 :1012C000910549F0883E934061F481E090E005C0CB :1012D00084E690E002C088EE93E09093030180934F :1012E00002010E947308FF91EF91BF91AF919F910E :1012F0008F917F916F915F914F913F912F910F90BF :101300000FBE0F901F9018951F920F920FB60F925D :1013100011242F933F934F935F936F937F938F93FA :101320009F93AF93BF93EF93FF9310926C00109233 :1013300068001DBA46B1842F817090E046B141FB30 :10134000222720F930E0C09BC09A49B144704093F5 :1013500000014091000141112EC08217930761F0F6 :10136000809108018F5F8093080180910801893086 :1013700078F0109208010CC0809108018150809390 :10138000080180910801893018F088E080930801F5 :101390000E947308FF91EF91BF91AF919F918F9140 :1013A0007F916F915F914F913F912F910F900FBE61 :1013B0000F901F90189540918100413109F0A5C010 :1013C0004091860050918700403F5A4008F09DC0F0 :1013D00040910801453009F098C08217930709F43D :1013E00066C08091D5019091D601A091D701B091AE :1013F000D801883E9340A105B10540F480910201D7 :10140000909103018536910508F034C18091D50192 :101410009091D601A091D701B091D8018436910561 :10142000A105B10538F480910201909103010B9759 :1014300008F027C18091D5019091D601A091D701E4 :10144000B091D8010A97A105B10538F48091020145 :1014500090910301029708F01BC120910201309185 :1014600003018091D5019091D601A091D701B0914F :10147000D801821B930BA109B1098093D5019093E8 :10148000D601A093D701B093D8018091D501909156 :10149000D601A091D701B091D8010297A105B1055D :1014A00008F076CF82E090E0A0E0B0E025C0809127 :1014B000D5019091D601A091D701B091D801893082 :1014C0009740A105B10540F0809102019091030180 :1014D0008536910508F0E3C02091020130910301A7 :1014E0008091D5019091D601A091D701B091D801FA :1014F000820F931FA11DB11D8093D5019093D6013A :10150000A093D701B093D80143CF40910801463052 :1015100009F069C040918600509187004536510519 :10152000B8F08217930749F080910101843608F0E2 :101530002FCF809101018F5F08C080910101882326 :1015400009F426CF8091010181508093010120CFC1 :101550008217930789F0209188003091890080914B :1015600086009091870028173907A8F48091880099 :101570009091890001960BC080918800909189001C :10158000892B49F080918800909189000197909370 :101590008900809388002091880030918900809193 :1015A0008600909187008217930748F48091860007 :1015B00090918700019790938900809388002091F3 :1015C0008800309189004091860050918700A4E600 :1015D000B0E00E94C2149A0140E050E00E947B14E7 :1015E00020930101D5CE8217930789F02091020143 :1015F000309103018091040190910501A0910601B1 :10160000B0910701820F931FA11DB11D10C0209141 :101610000201309103018091040190910501A09194 :101620000601B0910701821B930BA109B1098093B8 :10163000040190930501A0930601B09307018091E6 :10164000040190910501A0910601B09107011816BF :1016500019061A061B060CF49BCE81E090E0A0E070 :10166000B0E08093040190930501A0930601B0932C :1016700007018ECE84E690E09093030180930201EF :10168000C5CE8AE090E09093030180930201D2CE10 :1016900081E090E09093030180930201DECE84E626 :1016A00090E0909303018093020116CF1F920F9256 :1016B0000FB60F9211248F939F938091DD0190912B :1016C000DE0101969093DE018093DD019F918F9161 :1016D0000F900FBE0F901F901895109281001092DE :1016E000800081E080936F001092DE011092DD0196 :1016F000109285001092840086B386BB10929100F0 :101700001092900088B388BB9AE79093990081E18A :101710008093980090939B0080939A0090939F00F1 :1017200080939E0085E08093910087E08093810004 :1017300088B38823E9F31092810010926F00C0995A :1017400023C08091DD019091DE0140918400509191 :101750008500A0E0B0E0DC019927882760E070E018 :10176000842B952BA62BB72B809304019093050116 :10177000A0930601B09307011092DE011092DD01E3 :10178000109285001092840081E08093D401089526 :1017900095E890937A0010927B0010927D0021E0F2 :1017A00030E0082E01C0220F0A94EAF720937E0051 :1017B0006230B1F028F4662381F0613071F01BC013 :1017C000633099F06430B9F490E49093AD00909157 :1017D000CC009093C80060E00EC01092AD000BC02A :1017E0001092AD009091CE0004C01092AD00909187 :1017F000CD009093C8008F7090E4699FB0011124D0 :10180000682B60937C0020E031E080E090E0DC0118 :1018100040917A00406440937A0040917A0046FDFE :10182000FCCF4091780050917900840F951FA11D45 :10183000B11D2150310961F7892F9A2FAB2FBB279A :101840000895CF93C82F63E00E94C80B81382CE025 :10185000920728F4969587959695879527C062E01C :101860008C2F0E94C80B81312EE0920718F49695B8 :1018700087951CC064E08C2F0E94C80B883D2EE029 :101880009207A0F061E08C2F0E94C80BA091DB01B1 :10189000B091DC019C010E94C214DC01CB012CE060 :1018A000B695A795979587952A95D1F7CF910895E5 :1018B0000F931F9310927B0010927D0085E8809318 :1018C0007A008DE480937C0080E88093AD00809165 :1018D000CD008093C80080E091E000E010E0980126 :1018E00060917A00606460937A0060917A0066FD8E :1018F000FCCF6091780070917900060F171F211DB1 :10190000311D019769F75527432F322F212F60E0B2 :1019100070E080E490E00E947B14C9011F910F9158 :1019200008950E94580C9093DC018093DB0183E0C2 :101930000E94210C9093DA018093D90181E0809379 :10194000D40108950F931F93A7988CE08093A00073 :101950006091040170910501809106019091070149 :101960000E9431132DEB37E346E850E40E94E61362 :101970000E940013DC01CB01209108012230D9F034 :1019800050F4222391F0213031F58D0122273327A5 :1019900040E054E01BC02330A1F02430E1F48D017D :1019A0002227332740E052E011C08D012227332740 :1019B00040E056E00BC08D012227332740E055E080 :1019C00005C08D012227332740E053E0602F1F918F :1019D0000F910C949B051F910F9108958091080120 :1019E000853010F40E94A20C80910801873011F418 :1019F0000E946D0B80910801883011F40E94910CB7 :101A00008091D401882321F01092D4010C94AC056C :101A100008950F931F930DE010E02CE030E04BE0B1 :101A200050E06AE070E08CEB91E00E941A0D1F918B :101A30000F910895DF92EF92FF920F931F93CF9330 :101A4000DF93EC01F62ED42EE22E862F972FFC0189 :101A5000EB56F54FE491F0E0EE0FFF1FE055F54F28 :101A60006591749179836883FC01E658F54FE491A0 :101A7000E887842F952FFC01EB56F54FE491F0E0B9 :101A8000EE0FFF1FE055F54F459154915B834A835C :101A9000FC01E658F54FE491E9878E2D932FFC0168 :101AA000EB56F54FE491F0E0EE0FFF1FE055F54FD8 :101AB000259134913D832C83FC01E658F54FE49148 :101AC000EA87F801EB56F54FE491F0E0EE0FFF1FC7 :101AD000E055F54F259134913F832E83F801E65868 :101AE000F54FE491EB8761E08F2D0E94D21161E008 :101AF0008D2D0E94D21161E08E2D0E94D21161E0E5 :101B0000802F0E94D211FC860D87DF91CF911F910B :101B10000F91FF90EF90DF900895FC01A481B581B3 :101B2000411105C082859C918095892303C09285CF :101B30008C91892B8C9388E0A281B38167FF04C0CC :101B400021859C91922B04C091852C919095922394 :101B50009C93660F9085A081B1812C9190959223E2 :101B60009C9300002085A081B1819C91922B9C9335 :101B7000815011F70895EF92FF920F931F93CF9327 :101B8000DF93EC018B01603871052CF477FF05C001 :101B900000E010E002C00FE710E09A85EC81FD81C3 :101BA0008081892B80839985EA81FB818081892BC3 :101BB00080839885E881F9818081892B80838B855A :101BC000EE81FF8190818095892380836AE070E0B7 :101BD00080E090E00E9471119B85EE81FF81808101 :101BE000892B808340E061E2CE010E948D0D40E0B0 :101BF000602F6068CE010E948D0D40E066E0CE014E :101C00000E948D0D40E063E1CE010E948D0D40E009 :101C100060E2CE010E948D0D40E060E4CE010E94A2 :101C20008D0D40E060E8CE010E948D0D88EFE82E1A :101C3000FF24F39441E060E0CE010E948D0D81E02D :101C4000E81AF108B9F740E06CE0CE010E948D0D72 :101C50001F861E861D8A1F8B0E8BDF91CF911F91D1 :101C60000F91FF90EF9008950F931F93CF93DF9301 :101C7000FC012589211114C0EC0140E060E40E94C0 :101C80008D0D40E060E8CE010E948D0D08EF11E05F :101C900041E060E0CE010E948D0D01501109C1F7B5 :101CA000DF91CF911F910F9108957F928F929F9214 :101CB000AF92BF92CF92DF92EF92FF920F931F935A :101CC000CF93DF93EC018D89811184C08889FA015B :101CD000E80FF11DE535F1050CF07CC0898986958A :101CE00086958695F901E80FF11D37970CF072C0C3 :101CF0005901E12CF12CF42FF0687F2EC62ED12C47 :101D0000898986958695869590E0E816F9060CF007 :101D10004AC06A2D6E0D606440E0CE010E948D0DB8 :101D200040E0672DCE010E948D0D988989898695A6 :101D3000869586952A89A601421B5109989FC00164 :101D40001124489F8001499F100D589F100D1124A8 :101D50000C5F1F4F812C912C288930E0821693064E :101D6000F4F44C89E29EC001E39E900DF29E900D2A :101D70001124EE85FF85800F911FE80FF91F411197 :101D800002C0649102C06491609541E0CE010E945E :101D90008D0D5FEF851A950A0F5F1F4FDDCF8FEF17 :101DA000E81AF80AADCF40E060E4CE010E948D0D44 :101DB00040E060E8CE01DF91CF911F910F91FF903D :101DC000EF90DF90CF90BF90AF909F908F907F90DB :101DD0000C948D0DDF91CF911F910F91FF90EF909B :101DE000DF90CF90BF90AF909F908F907F9008959D :101DF0008F929F92AF92BF92CF92DF92EF92FF921B :101E00000F931F93CF93DF937C01FC018589811190 :101E100054C0FB0101900020E9F731978F01061BA8 :101E2000170B4F30F7E25F0759F4F7014089409FE5 :101E3000C001419F900D112444E550E0481B590B0F :101E40004E30F7E25F0789F4F7014089409FC001F7 :101E5000419F900D112444E550E0481B590B57FF5A :101E600002C04F5F5F4F55954795EA0157FF02C08B :101E7000C0E0D0E0C90137FD07966C0183E0D5943E :101E8000C7948A95E1F74B01A12CB12CA016B1069D :101E9000A4F4F40161914F01F70180898A9DA001AA :101EA0008B9D500D11244C0F5D1F9601C7010E94A0 :101EB000550EFFEFAF1ABF0AE9CFDF91CF911F9107 :101EC0000F91FF90EF90DF90CF90BF90AF909F90D9 :101ED0008F9008952F923F924F925F926F927F92D0 :101EE0008F929F92AF92BF92CF92DF92EF92FF922A :101EF0000F931F93CF93DF93CDB7DEB7E8970FB65D :101F0000F894DEBF0FBECDBF1C012A013B013EABE2 :101F10002DAB18AF0FABFC0185898111B3C0411502 :101F2000510561057105F1F4E114F104B9F0DE0128 :101F3000119680E090E0FD0121E0E21AF1088E1593 :101F40009F051CF4CD920196FACFE80FF91F20E30C :101F50002083FE01E80FF91F128286C080E3898387 :101F60001A8282C077FF0BC07094609450944094A2 :101F7000411C511C611C711CDD24D39401C0D12C67 :101F80005E013CE1A30EB11C8501C301B2012AE050 :101F900030E040E050E00E949D1420E3260FF8015D :101FA00021938F014F018A189B08A3019201261BE0 :101FB000370B480B590BCA01B9012AE030E040E069 :101FC00050E00E949D1429013A01232B242B252B3C :101FD000E1F6F501E80DF91D1082DD2011F08DE22A :101FE00089838D2D90E09C01280D391D2E153F050C :101FF000B4F4E1E0F0E0EC0FFD1FE80FF91FE81882 :10200000F908E81AF90AAF01BF01641B750B6E15D8 :102010007F051CF0F7FE05C002C0C192F5CFE12C90 :10202000F12CD501A80DB91D40E050E08E0D9F1D8B :1020300011974815590571F0FA01E80FF91F61E091 :1020400070E06C0F7D1FE60FF71F6C9160834F5F90 :102050005F4FEECF81E090E08C0F9D1FE80EF91EE0 :10206000F701E20FF31F108280E2E82E00E010E09B :102070002FA938AD4DA95EA9BE016F5F7F4FC10189 :102080000E94F80EE8960FB6F894DEBF0FBECDBFE3 :10209000DF91CF911F910F91FF90EF90DF90CF9044 :1020A000BF90AF909F908F907F906F905F904F9078 :1020B0003F902F9008952F923F924F925F926F9290 :1020C0007F928F92AF92BF92CF92DF92EF92FF9268 :1020D0000F931F93CF93DF93CDB7DEB76B970FB6F8 :1020E000F894DEBF0FBECDBFFC013589311154C05D :1020F000BC2C170128016A017B013C018E010F5F96 :102100001F4F4A2DC701B6010E94D114FEE2BF162F :1021100061F0F801CE014C96E817F90731F0208103 :102120002E3209F4B0823196F7CF80E2881641F161 :1021300020E030E0A901C701B6010E94821287FFAA :1021400012C08DE28983FE0131969E01255E3F4FCC :102150002E173F07A9F08181803211F08D3209F4EA :1021600081823196F5CFFE013196CE014C96E8176B :10217000F90731F02081203209F480823196F7CFBF :1021800080E2E82E00E010E09101A201BE016F5F45 :102190007F4FC3010E94F80E6B960FB6F894DEBF16 :1021A0000FBECDBFDF91CF911F910F91FF90EF90A8 :1021B000DF90CF90BF90AF908F907F906F905F90A7 :1021C0004F903F902F900895DC011F967C936E9363 :1021D0001E97FB01849150968C9350973196E49111 :1021E0005196EC935197FB013296E4915296EC9301 :1021F0005297FB013396649153966C935397549680 :102200001C9208951F920F920FB60F9211242F93D4 :102210003F938F939F93AF93BF938091E0019091F1 :10222000E101A091E201B091E3013091DF0123E0EF :10223000230F2D3720F40196A11DB11D05C026E8FE :10224000230F0296A11DB11D2093DF018093E001B1 :102250009093E101A093E201B093E3018091E40146 :102260009091E501A091E601B091E7010196A11DD1 :10227000B11D8093E4019093E501A093E601B09332 :10228000E701BF91AF919F918F913F912F910F9057 :102290000FBE0F901F9018953FB7F8948091E401FE :1022A0009091E501A091E601B091E70126B5A89BC8 :1022B00005C02F3F19F00196A11DB11D3FBFBA2FD8 :1022C000A92F982F8827820F911DA11DB11DBC0138 :1022D000CD0142E0660F771F881F991F4A95D1F7FD :1022E0000895CF92DF92EF92FF92CF93DF936B012D :1022F0007C010E944C11EB01C114D104E104F104F2 :1023000079F00E944C116C1B7D0B683E7340A0F36A :1023100081E0C81AD108E108F108C851DC4FECCFC0 :10232000DF91CF91FF90EF90DF90CF900895789458 :1023300084B5826084BD84B5816084BD85B58260CA :1023400085BD85B5816085BDEEE6F0E08081816068 :102350008083E1E8F0E01082808182608083808168 :1023600081608083E0E8F0E0808181608083E1EB40 :10237000F0E0808184608083E0EBF0E08081816028 :102380008083EAE7F0E080818460808380818260DE :10239000808380818E7F808380818068808310929B :1023A000C1000895CF93DF93282F30E0F901E6585C :1023B000F54F9491F901EB56F54F24916330E9F410 :1023C000843071F43091F00038603EBB30E83093D7 :1023D000F0003EB33093F00030B7306430BF0DC032 :1023E000863159F43091F00030613EBB30E83093D3 :1023F000F0003EB33093F0007E9A222381F130E06A :10240000220F331FF901E454F54FA591B491F9015E :10241000E055F54FC591D491611109C02FB7F894DB :102420008C91909589238C93E8819E230BC0623018 :1024300061F42FB7F8948C91392F309583238C93C6 :10244000E8819E2B98832FBF0AC0843041F08631EB :1024500031F08FB7F894EC919E2B9C938FBFDF9156 :10246000CF9108951F93CF93DF93C2EFD0E088817F :1024700084608EBB10E818838EB3888364E170E0BB :1024800080E090E00E94711188818F7980628EBB1C :1024900018838EB38883E1E6F0E010831082DF9129 :1024A000CF911F9108958091CD008ABD8091CE007B :1024B0008BBD8091EE0087608EBB80E88093EE003C :1024C0009EB39093EE0086BF90E496BF9091620019 :1024D0009C709C3011F40C9432128093610081E066 :1024E0008093610008950E9453120E9497110E94E8 :1024F000F008C0E0D0E00E94EE0C2097E1F30E94CB :102500000000F9CF0E946C1308F481E008950E9446 :102510009B120C94A7130E94A01358F00E949913C9 :1025200040F029F45F3F29F00C94901351110C9462 :10253000DB130C9496130E94B81368F39923B1F33C :10254000552391F3951B550BBB27AA2762177307D9 :10255000840738F09F5F5F4F220F331F441FAA1F6D :10256000A9F335D00E2E3AF0E0E832D09150504029 :10257000E695001CCAF72BD0FE2F29D0660F771FD7 :10258000881FBB1F261737074807AB07B0E809F0BD :10259000BB0B802DBF01FF2793585F4F3AF09E3F42 :1025A000510578F00C9490130C94DB135F3FE4F327 :1025B000983ED4F3869577956795B795F7959F5F85 :1025C000C9F7880F911D9695879597F90895E1E0D1 :1025D000660F771F881FBB1F621773078407BA0730 :1025E00020F0621B730B840BBA0BEE1F88F7E0958B :1025F00008950E9400136894B1110C94DB130895A0 :102600000E94C01388F09F5798F0B92F9927B751AF :10261000B0F0E1F0660F771F881F991F1AF0BA9586 :10262000C9F714C0B13091F00E94DA13B1E00895F7 :102630000C94DA13672F782F8827B85F39F0B93FE9 :10264000CCF3869577956795B395D9F73EF4909539 :102650008095709561957F4F8F4F9F4F0895E894B7 :1026600009C097FB3EF490958095709561957F4FDA :102670008F4F9F4F9923A9F0F92F96E9BB27939588 :10268000F695879577956795B795F111F8CFFAF498 :10269000BB0F11F460FF1BC06F5F7F4F8F4F9F4FC9 :1026A00016C0882311F096E911C0772321F09EE827 :1026B000872F762F05C0662371F096E8862F70E08D :1026C00060E02AF09A95660F771F881FDAF7880F67 :1026D0009695879597F90895990F0008550FAA0BBD :1026E000E0E8FEEF16161706E807F907C0F0121625 :1026F0001306E407F50798F0621B730B840B950B28 :1027000039F40A2661F0232B242B252B21F408957C :102710000A2609F4A140A6958FEF811D811D089519 :1027200097F99F6780E870E060E008959FEF80EC84 :10273000089500240A941616170618060906089527 :1027400000240A9412161306140605060895092E8D :102750000394000C11F4882352F0BB0F40F4BF2BFC :1027600011F460FF04C06F5F7F4F8F4F9F4F08953C :1027700057FD9058440F551F59F05F3F71F0479532 :10278000880F97FB991F61F09F3F79F08795089517 :10279000121613061406551FF2CF4695F1DF08C036 :1027A000161617061806991FF1CF86957105610553 :1027B00008940895E894BB2766277727CB0197F9FB :1027C00008950E946C1308F48FEF08950E94F91386 :1027D0000C94A7130E94991338F00E94A01320F0C4 :1027E000952311F00C9490130C94961311240C94CF :1027F000DB130E94B81370F3959FC1F3950F50E05F :10280000551F629FF001729FBB27F00DB11D639FA2 :10281000AA27F00DB11DAA1F649F6627B00DA11D48 :10282000661F829F2227B00DA11D621F739FB00DEE :10283000A11D621F839FA00D611D221F749F33275E :10284000A00D611D231F849F600D211D822F762FF7 :102850006A2F11249F5750409AF0F1F088234AF0D4 :10286000EE0FFF1FBB1F661F771F881F9150504040 :10287000A9F79E3F510580F00C9490130C94DB1344 :102880005F3FE4F3983ED4F3869577956795B795C7 :10289000F795E7959F5FC1F7FE2B880F911D9695E1 :1028A000879597F90895AA1BBB1B51E107C0AA1F82 :1028B000BB1FA617B70710F0A61BB70B881F991FE1 :1028C0005A95A9F780959095BC01CD01089597FB85 :1028D000072E16F4009407D077FD09D00E945314F8 :1028E00007FC05D03EF4909581959F4F0895709513 :1028F00061957F4F0895A1E21A2EAA1BBB1BFD0113 :102900000DC0AA1FBB1FEE1FFF1FA217B307E407CE :10291000F50720F0A21BB30BE40BF50B661F771F26 :10292000881F991F1A9469F7609570958095909506 :102930009B01AC01BD01CF010895052E97FB1EF44C :1029400000940E94B41457FD07D00E947B1407FC2A :1029500003D04EF40C94B4145095409530952195C5 :102960003F4F4F4F5F4F08959095809570956195BB :102970007F4F8F4F9F4F0895EE0FFF1F0590F491EB :10298000E02D0994A29FB001B39FC001A39F700DD9 :10299000811D1124911DB29F700D811D1124911D67 :1029A0000895EF920F931F93CF93DF93E80147FDB4 :1029B00002C034E001C034E1042E000C550B57FF77 :1029C00003C0519541955109E32E022F242FAE01EA :1029D0000E94F416CE01DF91CF911F910F91EF90DD :1029E0000895AEE0B0E0E7EFF4E10C94E4190D894E :1029F0001E8986E08C831A8309838FEF9FE79E836D :102A00008D83AE01475E5F4F6F89788DCE01019651 :102A10000E941315EF81F885E00FF11F10822E96AA :102A2000E4E00C94001AABE0B0E0E9E1F5E10C94CD :102A3000D6196C017B018A01FC0117821682838101 :102A400081FFCCC1CE0101963C01F6019381F701D3 :102A500093FD859193FF81917F01882309F4BAC189 :102A6000853239F493FD859193FF81917F01853201 :102A700029F4B60190E00E943C19E7CF912C212C5B :102A8000312CFFE1F315D8F08B3279F038F4803235 :102A900079F08332A1F4232D20611DC08D3261F0C5 :102AA000803369F4232D216016C0832D8260382E77 :102AB000E32DE4603E2E2AC0F32DF8601DC037FCE4 :102AC0002DC020ED280F2A3040F08E32B9F436FCAC :102AD00081C1232D2064322E19C036FE06C08AE043 :102AE000989E200D1124922E11C0EAE02E9E200DFA :102AF0001124222EF32DF0623F2E08C08C3621F4D3 :102B0000832D8068382E02C0883641F4F70193FD8A :102B1000859193FF81917F018111B3CF982F9F7D84 :102B20009554933028F40C5F1F4F9FE399830DC099 :102B3000833631F0833771F0833509F059C021C0F5 :102B4000F801808189830E5F1F4F88248394912C24 :102B5000530113C02801F2E04F0E511CF801A08070 :102B6000B18036FE03C0692D70E002C06FEF7FEFC9 :102B7000C5010E9431194C018201F32DFF773F2ED0 :102B800016C0280122E0420E511CF801A080B1803D :102B900036FE03C0692D70E002C06FEF7FEFC50104 :102BA0000E9426194C01F32DF0683F2E820133FC60 :102BB0001BC0822D90E088169906B0F4B60180E221 :102BC00090E00E943C192A94F4CFF50137FC8591DE :102BD00037FE81915F01B60190E00E943C192110FF :102BE0002A9421E0821A91088114910471F7E8C0B7 :102BF000843611F0893641F5F80137FE07C060814F :102C00007181828193810C5F1F4F08C06081718147 :102C1000072E000C880B990B0E5F1F4FF32DFF76CC :102C20003F2E97FF09C090958095709561957F4FD5 :102C30008F4F9F4FF0683F2E2AE030E0A3010E94A3 :102C40007819882E861845C0853731F4232D2F7EBC :102C5000B22E2AE030E025C0932D997FB92E8F3611 :102C6000C1F018F4883579F0B5C0803719F088378D :102C700021F0B0C0E92FE061BE2EB4FE0DC0FB2DE7 :102C8000F460BF2E09C034FE0AC0292F2660B22E80 :102C900006C028E030E005C020E130E002C020E1BD :102CA00032E0F801B7FE07C06081718182819381B3 :102CB0000C5F1F4F06C06081718180E090E00E5F65 :102CC0001F4FA3010E947819882E8618FB2DFF77CD :102CD0003F2E36FE0DC0232D2E7FA22E891458F4D0 :102CE00034FE0BC032FC09C0832D8E7EA82E05C099 :102CF000B82CA32C03C0B82C01C0B92CA4FE0FC063 :102D0000FE01E80DF11D8081803321F49A2D997E1A :102D1000A92E09C0A2FE06C0B394B39404C08A2DA4 :102D2000867809F0B394A3FC11C0A0FE06C0B214CB :102D300088F4280C922C9B180EC0B21460F4B601D3 :102D400080E290E00E943C19B394F7CFB21418F4DB :102D50002B1802C0982C212CA4FE10C0B60180E3D1 :102D600090E00E943C19A2FE17C0A1FC03C088E7B6 :102D700090E002C088E590E0B6010CC08A2D86780C :102D800059F0A1FE02C08BE201C080E2A7FC8DE2F7 :102D9000B60190E00E943C19891438F4B60180E332 :102DA00090E00E943C199A94F7CF8A94F301E80DC1 :102DB000F11D8081B60190E00E943C198110F5CF91 :102DC000222009F442CEB60180E290E00E943C1934 :102DD0002A94F6CFF6018681978102C08FEF9FEF8C :102DE0002B96E2E10C94F219A9E0B0E0EAEFF6E1EB :102DF0000C94DC196A01122FB02E2BE3201720F05F :102E0000FF24F394F00E02C02CE3F22E0F2D27E0E6 :102E1000AE014F5F5F4F0E944E18BC014981842F65 :102E20008970813031F0E1FC06C0E0FE06C090E21E :102E300005C09DE203C09BE201C090E05E2D507191 :102E400043FF3CC0911102C083E001C084E08117C0 :102E500018F4212F281B01C020E051110BC0F601EE :102E6000822F30E2882319F031938150FBCFC20EBC :102E7000D11C20E0992329F0D6019C93F6013196CC :102E80006F01C6010396E2FE0AC03EE4D6013C9300 :102E900041E411964C93119712963C9306C03EE67E :102EA000F601308341E641833283FC01322F40E258 :102EB000332309F442C041933150FACF42FF44C05A :102EC000911102C083E001C084E0811718F4212F22 :102ED000281B01C020E051110BC0F601822F30E207 :102EE000882319F031938150FBCFC20ED11C20E012 :102EF000992329F0D6019C93F60131966F01C60102 :102F00000396E2FE0BC039E4D6013C933EE41196F1 :102F10003C93119736E412963C9307C039E6F601CC :102F200030833EE6318336E63283FC01322F40E2C5 :102F3000332319F041933150FBCFFC01E20FF11D17 :102F400010828EEF9FEFA6C021E030E0911102C009 :102F500020E030E0161617061CF4FB01319602C083 :102F6000E1E0F0E02E0F3F1FBB2021F0EB2DF0E061 :102F7000319602C0E0E0F0E02E0F3F1FE12FF0E0BD :102F80002E173F071CF4121B212F01C020E08E2DAD :102F9000887159F4F601822F30E2882319F03193B9 :102FA0008150FBCFC20ED11C20E0992329F0D6011D :102FB0009C93F60131966F0151110BC0F601822FDF :102FC00090E3882319F091938150FBCFC20ED11C5E :102FD00020E00F2D060F9A81342F307144FF03C07B :102FE000913309F40150101624F4093018F008E068 :102FF00001C001E0AB0177FF02C040E050E0FB01FF :10300000E41BF50BA1E0B0E0AC0FBD1FEA0FFB1F06 :103010008EE2A82E4B01801A91080B2D10E011951D :10302000019511094F3FBFEF5B0721F4D601AC9228 :1030300011966D01641775072CF08416950614F42B :10304000818101C080E3415051093196D60111962A :103050007D014017510724F0D6018C936701E2CF20 :103060006417750739F4963320F4953319F4311148 :1030700001C081E3F6018083F701822F90E288236B :1030800019F091938150FBCFF701E20FF11D1082EF :1030900080E090E02996ECE00C94F819283008F0D4 :1030A00027E03327DA01990F311D87FD91600096E3 :1030B0006105710539F432602E5F3D9330E32A9546 :1030C000E1F708959F3F30F080387105610509F000 :1030D0003C5F3C5F3D93913008F08068911DDF9329 :1030E000CF931F930F93FF92EF92192F987F96958E :1030F000E92F96959695E90FFF27EC52FF4F9927F8 :103100003327EE24FF24A701E701059008940794D4 :1031100028F4360FE71EF81E491F511D660F771F52 :10312000881F991F0694A1F70590079428F4E70ECD :10313000F81E491F561FC11D770F881F991F661F54 :103140000694A1F70590079428F4F80E491F561F1E :10315000C71FD11D880F991F661F771F0694A1F7FF :103160000590079420F4490F561FC71FD81F990FC9 :10317000661F771F881F0694A9F784911095177012 :1031800041F0D695C79557954795F794E7941A95CA :10319000C1F7EAE7F0E068941590159135916591D3 :1031A000959105907FE27395E118F10A430B560B58 :1031B000C90BD009C0F7E10CF11E431F561FC91FF0 :1031C000D01D7EF4703311F48A95E6CFE894015057 :1031D00030F0080F0AF40027021708F4202F239577 :1031E000022F7A3328F079E37D932A95E9F710C00E :1031F0007D932A9589F60694979567953795179547 :103200001794E118F10A430B560BC90BD00998F03B :1032100023957E9173957A3308F070E37C932013A5 :10322000B8F77E9170617D9330F0839571E37D9363 :1032300070E32A95E1F71124EF90FF900F911F9111 :10324000CF91DF91992787FD90950895FC01059016 :10325000615070400110D8F7809590958E0F9F1F98 :103260000895FC016150704001900110D8F78095DD :1032700090958E0F9F1F08950F931F93CF93DF9309 :10328000FB01238121FD03C08FEF9FEF2CC022FFA4 :1032900016C046815781248135814217530744F473 :1032A000A081B1819D012F5F3F4F318320838C939B :1032B000268137812F5F3F4F3783268314C08B01D0 :1032C000EC01FB010084F185E02D0995892BE1F6E5 :1032D000D80116968D919C911797019617969C93FD :1032E0008E931697CE01DF91CF911F910F91089584 :1032F000FA01AA27283051F1203181F1E8946F9327 :103300006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED0CC :10331000B4E03CD0670F781F891F9A1FA11D680F6A :10332000791F8A1F911DA11D6A0F711D811D911D9D :10333000A11D20D009F468943F912AE0269F112412 :103340003019305D3193DEF6CF010895462F477076 :10335000405D4193B3E00FD0C9F7F6CF462F4F70D1 :10336000405D4A3318F0495D31FD4052419302D02F :10337000A9F7EACFB4E0A6959795879577956795D5 :10338000BA95C9F700976105710508959B01AC01D5 :103390000A2E06945795479537952795BA95C9F7FC :1033A000620F731F841F951FA01D08952F923F92D7 :1033B0004F925F926F927F928F929F92AF92BF9245 :1033C000CF92DF92EF92FF920F931F93CF93DF93F1 :1033D000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE4E :1033E000CDBF09942A88398848885F846E847D849B :1033F0008C849B84AA84B984C884DF80EE80FD809D :103400000C811B81AA81B981CE0FD11D0FB6F89412 :0E341000DEBF0FBECDBFED010895F894FFCFD3 :10341E0001326400E80300000503030202467265F0 :10342E007175656E63792C20487A004672657175E8 :10343E00656E63792C206B487A00566F6C746167E9 :10344E00652C20566F6C740053696E75732044445E :10345E005300547269616E676C6520444453004D8D :10346E0065616E6472204444530050696C61312072 :10347E004444530050696C61322044445300505709 :10348E004D204D6F64650044757479204D6F6465F1 :10349E00004672657120636F756E74657200566FAB :1034AE006C74206D6574657200447574793D256485 :1034BE0020252500537465703D2564005663633DD9 :0C34CE002025642E25303264207600009A :00000001FF
Как-то через задницу ты собираешься решать проблему. Не проще ли как-то разобраться с фразой
Понять, что это, на самом деле, не так, и набить руку в этом (а заодно и морду тому, кто тебе это сказал)?
Вот, смотри, оба массива выровнены на границу, кратную 0x100 безо всяких проблем. Запускай, смотри какие у них адреса
А у самого Dimax-a чего не спросите. Чет мне чудится, что это его генератор.
Только там Dimax ещё сам этого не знал.)
Если можно,то удалите тему,получилось...Dimax помог.Спасибо за "советы"
Спасибо за "советы"
как-то неуважительно звучит. а чем совет Ворота не устроил?