ссылка: http://qclk.ru/kz/s3z1
Форум архив не принимает
Код: Выделить всё
char FAT_INI(void)
{
SD_READ(0); //0 сектор
short BytePerSec = *((short *)&BUFFER[11]);
lcd_int(BytePerSec, 3, 0);
}
08001512: movs r0, #0
08001514: bl 0x8000960 <SD_READ>
08001518: ldr r2, [pc, #32] ; (0x800153c <FAT_INI+48>)
0800151a: adds r3, r7, #6
0800151c: ldrh r2, [r2, #0]
0800151e: strh r2, [r3, #0]
08001520: adds r3, r7, #6
08001522: movs r2, #0
08001524: ldrsh r3, [r3, r2]
08001526: adds r0, r3, #0
08001528: movs r1, #3
0800152a: movs r2, #0
0800152c: bl 0x8001064 <lcd_int>Код: Выделить всё
short BytePerSec;
void FAT_INI(void){
SD_READ(32); //0 сектор
BytePerSec = *((short *)&BUFFER[11]);
sprintf(str, "BytePerSec_0x%x ", BytePerSec);
LCD_PutStr8x12(5, 30, str, 0);
}Код: Выделить всё
short BytePerSec = *((short *)&BUFFER[11]);Код: Выделить всё
BytePerSec = *((short *)&BUFFER[11]);в CooCox Си язык. А в чем разница строк чет не понял из-за переменной что ли? У меня в кокосе в обоих случаях ошибка хоть как делай.drakon писал(а):завтра, точнее уже сегодня установлю CooCox и попробую.
а вы пишете на C++? просто у меня в этой строке вылетает ошибка:а в этой все ок:Код: Выделить всё
short BytePerSec = *((short *)&BUFFER[11]);Код: Выделить всё
BytePerSec = *((short *)&BUFFER[11]);
Оптимизация отключена вообще. При оптимизации вообще не работает прошивка. Ну вот что-то компилятор возможно настраивать надо как то его указывать, я не знаю как.murkot писал(а):Сам сталкивался с таким. Причина в том, что компилятор из-за оптимизации не выделяет память под переменную. Можно даже легко в HardFault попасть на таком присвоении.
Код: Выделить всё
short BytePerSec; //объявляем гл. переменную
void FAT_INI(void)
{
SD_READ(0); //0 сектор
BytePerSec = *((short *)&BUFFER[11]);
lcd_int(BytePerSec, 3, 0);
}
Попробуйте присвоить по 1 байтуshort BytePerSec = *((short *)&BUFFER[11]);
Код: Выделить всё
short BytePerSec;
((char*)&BytePerSec)[0] = BUFFER[11];
((char*)&BytePerSec)[1] = BUFFER[12];
В IAR проверил все ок работает такая конструкция.drakon писал(а):поставил CoIDE, но проект так и не удалось скомпилировать, куча непонятных ошибок.
чего у вас возвращаемый параметр ф-и char, но вы ничего не возвращаете? а объявление переменной не в начале кода возможно только на C++. при исправлении этого в KEIL все работает.Код: Выделить всё
short BytePerSec; //объявляем гл. переменную void FAT_INI(void) { SD_READ(0); //0 сектор BytePerSec = *((short *)&BUFFER[11]); lcd_int(BytePerSec, 3, 0); }
В IAR работает все делал так:Oxford писал(а):drakon писал(а):завтра, точнее уже сегодня установлю CooCox и попробую.
а вы пишете на C++? просто у меня в этой строке вылетает ошибка:Код: Выделить всё
short BytePerSec = *((short *)&BUFFER[11]);