- 
	- А ничего не будет - запишется байт. По крайней мере у меня в загрузчике это работает:  Гудвин(177 знак., 18.11.2009 08:31)
			- Интересно все-таки адресная арифметика работает.  Алехин Александр(1043 знак., 18.11.2009 08:42)
					- Ндык определить сразу pData, как указатель на слово и все пучком будет... - Гудвин(18.11.2009 08:46)
							- да нет, просто случайно листинг посомотрел, и увидел, что указатели не правильно инкрементируются. Сразу вопрос возник - что я делаю не так? - Алехин Александр(18.11.2009 08:53)
									- Указатель инкрементируется на размер объекта на который он указывает. - 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)
											
 
- да нет, просто случайно листинг посомотрел, и увидел, что указатели не правильно инкрементируются. Сразу вопрос возник - что я делаю не так? - Алехин Александр(18.11.2009 08:53)
									
 
- Ндык определить сразу pData, как указатель на слово и все пучком будет... - Гудвин(18.11.2009 08:46)
							
 
- Интересно все-таки адресная арифметика работает.  Алехин Александр(1043 знак., 18.11.2009 08:42)
					
- ничего не будет - Shura(18.11.2009 08:23)
 
- А ничего не будет - запишется байт. По крайней мере у меня в загрузчике это работает:  Гудвин(177 знак., 18.11.2009 08:31)