ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
172825 Топик полностью
Алехин Александр (18.11.2009 08:42, просмотров: 125) ответил Гудвин на А ничего не будет - запишется байт. По крайней мере у меня в загрузчике это работает:
Интересно все-таки адресная арифметика работает. Сечас "вылизываю" запись во флеш. На входе имею указатели на BYTE. Если адрес нечетный (см.пост ниже - узнать четность адреса без его приведения к целому нельзя!) или осталось записать 1 байт - пишу как байт, т.е. *(pFlash++) = *(pData++). Тут вопросов нет. Иначе (адрес четный и больше 1 байта надо записать) - пишу словами. Тут работает только такая конструкция: *((WORD *)pFlash) = *((WORD *)pData), pFlash += 2, pData += 2; в листинге выходит очень красиво: 00002E BC4D0000 MOV.W @R13+, 0(R12) 000032 2C53 ADD.W #0x2, R12 Теперь пытаемся совместить копирование и инкремент адреса: *((WORD *)pFlash++) = *((WORD *)pData++); 00002E AC4D0000 MOV.W @R13, 0(R12) 000032 1D53 ADD.W #0x1, R13 000034 1C53 ADD.W #0x1, R12 Вот тебе раз - на приведение указателя к указателю на WORD компилятор "положил"! Попытаемся добавить скобочек (вдруг компилятор сначала сделал инкремент, потомы типы привел: *(((WORD *)pFlash)++) = *(((WORD *)pData)++); Фиг вам - не дает так сделать.