Это у меня случайно отправилось. Вот вся функция: void Skatnet_Read_Data_From_Ext_Mem(void) { unsigned long data; unsigned long *ptr_to_data; unsigned long *ptr_to_addr; unsigned char i,j; unsigned char err_code = ERR_NOT;
if(skatnet.buf[RX_MEM_DATA_LONG] > MAX_LEN_MEM_DATA)//Если запрашиваемая длина данных превышает допустимый размер { Skatnet_Send_Error(ERR_MISMTH_PARAM);//Вернем код ошибки } else { skatnet.buf[TX_ERR_CODE] = ERR_NOT; skatnet.buf[TX_MEM_DATA_LONG] = skatnet.buf[RX_MEM_DATA_LONG];
ptr_to_addr = (unsigned long*)((&skatnet.buf[0]) + RX_MEM_ADDR); //Вычисляем адрес 32 битного окна ptr_to_data = (unsigned long*)(&data); i = 0; do { *ptr_to_addr = i; //Вот здесь выскакивает ошибка data = Ext_Mem_Sram_Read(&err_code, ((*ptr_to_addr)>>2));//Ну и здесь
if(err_code == ERR_NOT) { j = ((*ptr_to_addr)&3);
do { skatnet.buf[TX_MEM_DATA + i] = (*(unsigned char*)(ptr_to_data + j)); i++; j++; }while(j<4); } else { Skatnet_Send_Error(ERR_DEV_TROUBLE); return; }
}while(i < skatnet.buf[RX_MEM_DATA_LONG]);
Send_Pac_To_UART(SKNET_CMD_MEMORY_CNTRL, (skatnet.buf[TX_MEM_DATA_LONG] + 2), &skatnet.buf[TX_MEM_DATA]); } }
Пробовал просто создавать указатель и в него писать данные. Тот-же эффект. Если-же чар создать указатель, то все норамльно. Помогите разобраться! И еще - это правильно, что при создании указателя он инициализируется нулем? Мне казалось, что с ним как и с переменными. Компилятор выбирает свободный кусок памяти и нет проблем. Может надо где галку постаить или прагму?
|