Написал вот такой код:
Код
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Stop timer
TCCR2=0x00;
if(get_incoming_pkt()==3){
switch (check_command(myip)) {
case 0:
strcpyf(service_msg, "Micro_device#0:not_a_command");
service_msg[13]=device_id;
send_to_server(service_msg, service_msg_len);
break;
case 1:
init_ip_arp_udp(mymac,myip);
strcpyf(service_msg, "Micro_device#0:IP_changed");
service_msg[13]=device_id;
send_to_server(service_msg, service_msg_len);
break;
case 2:
strcpyf(service_msg, "Micro_device#0:comm_2_done");
service_msg[13]=device_id;
send_to_server(service_msg, service_msg_len);
break;
default:
strcpyf(service_msg, "Micro_device#0:command_Error");
service_msg[13]=device_id;
send_to_server(service_msg, service_msg_len);
};
};
// Start timer
TCCR2=0x07;
TCNT2=0x00;
} // end of interrupt
void main(void)
....
unsigned int* pointer;
......
pointer=get_adc_data();
for(i=0;i<6;i++){
data_msg[16+2*i]=(*(pointer+i))>>8; //MSB
data_msg[16+2*i+1]=(*(pointer+i)) & 0xff; //LSB
};
......
Проблема следующая: при возникновении прерывания во время работы с указателем, значения записываемые в data_msg[], искажаются.
При запрете прерываний на этот кусок кода, всё работает нормально.
Сообщение отредактировал troy97 - Sep 25 2009, 07:20