-
- Указатель инкрементируется на размер объекта на который он указывает. - rezident(18.11.2009 09:01)
- конечно, именно этого я и ожидал! т.е. по моим представлениям "(WORD *)ptr++" должен увеличивать ptr на 2 - Алехин Александр(18.11.2009 09:03)
- Память то побайтно адресуемая? Значит на 2 байта указатель на WORD должен увеличиваться, или в этом случае преобразование типов не должно работать? - Алехин Александр(18.11.2009 09:05)
- ИМХО *((WORD *)pFlash++) указатель приводится к типу WORD только при извлечении данных. При операции инкремента значения указателя его тип не меняется. Это косвенно и подтверждается вторым вашим опытом с доп. количеством скобок *(((WORD *)pFlash)++) на rezident(264 знак., 18.11.2009 09:25)
- надо попробовать изначально указатель как void * объявить. Может из void, где типы в любом случае надо приводить, он будет обращать внимание на размер объекта. Алехин Александр(371 знак., 18.11.2009 09:36)
- Ёлки, да что тут непонятного? Выражение разбирается сначала вправо, затем влево (учитывая скобки ессно). СНАЧАЛА компилятор видит что указатель инкрементируется, а ЗАТЕМ приведение типов. То, что инкремент работает ПОСЛЕ - уже не важно. Точно =AlexD=(62 знак., 18.11.2009 09:58)
- какого тогда не работает с доп.скобками ((WORD *)ptr)++? Здесь скобки однозначно определяют последовательность? - Алехин Александр(18.11.2009 10:01)
- Или косяк компилятора, или где-то не то смотришь. - =AlexD=(18.11.2009 10:03)
- expression must be a modifiable lvalue - Алехин Александр(18.11.2009 10:06)
- Или косяк компилятора, или где-то не то смотришь. - =AlexD=(18.11.2009 10:03)
- какого тогда не работает с доп.скобками ((WORD *)ptr)++? Здесь скобки однозначно определяют последовательность? - Алехин Александр(18.11.2009 10:01)
- Ёлки, да что тут непонятного? Выражение разбирается сначала вправо, затем влево (учитывая скобки ессно). СНАЧАЛА компилятор видит что указатель инкрементируется, а ЗАТЕМ приведение типов. То, что инкремент работает ПОСЛЕ - уже не важно. Точно =AlexD=(62 знак., 18.11.2009 09:58)
- И вообще, я когда-то тоже сталкивался с проблемами подобными вашим, но "забил" на них и просто пишу во Flash байтами. - rezident(18.11.2009 09:28)
- У меня тоже и так все работало, писал побайтно и не заморачивался. Алехин Александр(614 знак., 18.11.2009 09:54)
- Дык так всегда и делал - дописывал лог. И быстрее, и ресурс флэш экономит. - Гудвин(18.11.2009 10:11)
- У меня тоже и так все работало, писал побайтно и не заморачивался. Алехин Александр(614 знак., 18.11.2009 09:54)
- надо попробовать изначально указатель как void * объявить. Может из void, где типы в любом случае надо приводить, он будет обращать внимание на размер объекта. Алехин Александр(371 знак., 18.11.2009 09:36)
- ИМХО *((WORD *)pFlash++) указатель приводится к типу WORD только при извлечении данных. При операции инкремента значения указателя его тип не меняется. Это косвенно и подтверждается вторым вашим опытом с доп. количеством скобок *(((WORD *)pFlash)++) на rezident(264 знак., 18.11.2009 09:25)
- Память то побайтно адресуемая? Значит на 2 байта указатель на WORD должен увеличиваться, или в этом случае преобразование типов не должно работать? - Алехин Александр(18.11.2009 09:05)
- конечно, именно этого я и ожидал! т.е. по моим представлениям "(WORD *)ptr++" должен увеличивать ptr на 2 - Алехин Александр(18.11.2009 09:03)
- В MSP надо следить за выравниванием данных (в структурах, например). Компилятор выравнивает на границу одного 16 бит. слова, если байтовое данное "не так" лежит... - Гудвин(18.11.2009 09:00)
- Указатель инкрементируется на размер объекта на который он указывает. - rezident(18.11.2009 09:01)