ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
13 мая
39169 Топик полностью
VAI (15.09.2005 07:36, просмотров: 1) ответил Алехин Александр на Не получается (IAR): надо разместить переменную во Flash, что бы она была инициализированной после записи программы, но не реинициализировалась после сброса.
Ответ: 
// Так можно объявить структуру
typedef struct              // Константы, меняемые при регулировке
{ unsigned short    Firm_number;        // заводской номер прибора
  unsigned short    Firmware_ver;       // версия по прибора
  double            M_press;
  float             accuracy[bas_cnt];
  float             auto_zero_val[bas_cnt];
  ser_io_koef       net_param;
  press_difference  Press_diff;
  FLAG              ini_flag;
} Flash_Constant;

// в файле, где инициализируем
#pragma constseg = INFO                 // const Flash_Constant f_const
// можно любой другой сегмент объявить в файле *.xls
// но не забыть при стирании/записи,
// что размеры сегментов INFOA, INFOB - по 128 байт
// сегмент 0x1100..0x11ff = 256 байт, все остальные = 512 байт
const Flash_Constant f_const =
{
// Firm_number
  10083,                                // заводской номер прибора
// Firmware_ver
  90,                                   // версия по
// M_press
  112241.676452499,
// accuracy[bas_cnt]
  { 0.01,
    1.,
    0.01
  },
// auto_zero_val[bas_cnt]
  { 0.003,
    2.0,
    0.007
  },
// net_param
  { 10, B_1200 },
// Параметры press_difference
  { 1500,
    70,
    2
  },
// ini_flag - Флаги
  {
// Служебные, редактировать запрещено
    OFF,   // flt_prg       
    OFF,   // ini_measure  
    OFF,   // enable_calk   
    ON,    // enable_ind    
    OFF,   // OSCFault_isr  
    OFF,   // m_prtcl       
    OFF,   // enable_temp_f 
    OFF,   // enable_temp_q 
    OFF,   // cls_term      
    OFF,   // low_flow      
    OFF,   // uart0_tx_run  
    OFF,   // uart1_tx_run  
    ON,    // auto_zero     
    ON,    // enable_dyna   
    OFF,   // view_Prp      
    OFF,   // view_ADC      
    OFF,   // debug         
    ON     // channel_P    
  }
};
#pragma constseg = default

// в других файлах, где применяем
extern const Flash_Constant f_const;
/////////////////////////////////////

// используем:
volatile FLAG flag;

  flag = f_const.ini_flag; // Проинициализируем все флаги оптом
......
  flag.OSCFault_isr = ON; 
......
  do
  { flag.flt_prg = OFF;
    c = cur_measure.Zn[a];
  } while ( flag.flt_prg == ON );
.......
  if ( flag.debug == ON )
  { flag.enable_ind = OFF;
    printf( "......" );
    delay( 1500 );
    flag.cls_term = ON;
    flag.enable_ind = ON;
  }