03.08.2012, 18:00
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Типа, так можно
Код:
|
unsigned int a,b, i;
for(i=0; a = pgm_read_byte(&RGB[i++])‹‹8;)
{
write_data(a |= pgm_read_byte(&RGB[i++]));
} |
Последний раз редактировалось Yurkin2007; 03.08.2012 в 18:09.
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
03.08.2012, 18:11
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Благодарю оба варианта подошли.
|
|
|
|
03.08.2012, 19:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
Здравствуйте. Как считать из Flash памяти МК два байта в двубайтовую переменную? Так записывается только младший байт.
Код:
|
{
unsigned int a,b, i;
for(i=0;pgm_read_byte(&RGB[i]);i++)
{
a=pgm_read_byte(&RGB[i]);
a = a››8;
i=i++;
a=pgm_read_byte(&RGB[i]);
write_data(a);
} |
|
С.М.С, никто не обратил Вашего внимания на некоторые ошибки в тексте, значит, Вы их снова допустите в других случаях. Чтобы этого не произошло, хочу обратить внимание на следующее:
Код:
|
{ for(i=0;pgm_read_byte(&RGB[i]);i++)
{ ...} |
Здесь, в качестве признака завершения цикла, использовано значение, возвращаемое вызовом pgm_read_byte. Врядли Вы именно это имели ввиду - ведь так цикл и чтения будут продолжаться до тех пор, пока из Flash не будет считан ноль.
Код:
|
{ a=pgm_read_byte(&RGB[i]);
a = a››8;
...
a=pgm_read_byte(&RGB[i]);} |
Здесь первое считанное в переменную 'a' значение выталкивается из нее полностью, так как сдвиг происходит в сторону младших, а не старших разрядов. Переменная становится равной нулю и только второе чтение из Flash запоминается в ней. Этот оператор не приводит к изменению значения переменной i, так как Вы применили постинкрементирование, то есть, последовательность такова: - сохраняется старое значение переменной,
- переменная увеличивается на 1,
- переменной присваивается значение, сохраненное на шаге 1.
Если бы не эти огрехи, Ваш код тоже сработал бы, повидимому.
Удачи.
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 04.08.2012 в 00:09.
|
|
|
Сказали "Спасибо" tempora
|
|
|
03.08.2012, 21:51
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Благодарю, а то я уже битый час гадаю, почему из цикла вылетает, а оно вон как. Надо нормальную книгу найти, а то так долго можно мозги парить себе и другим.
|
|
|
|
03.08.2012, 22:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
Надо нормальную книгу найти, а то так долго можно мозги парить себе и другим.
|
Вообще-то не книгу нормальную надо искать. Их навалом. Надо их читать с большим вниманием и стараться поглубже вникать.
Все рекомендуют, я присоединяюсь. Обязательно к прочтению. С нее надо начинать.
Brian W. Kernigan
Dennis M. Ritchie
The C Programming Language.
Я по ней учил язык.
Есть полностью и правильно переведенная на русский.
А уж про десятки аналогичных, да и просто справочников по языку - даже не говорю.
Читать, каждый фрагмент, каждый оператор, каждую функцию проверять на практике. Шагать симуляторами, отладчиками. Впитывать в кровь. Ведь недаром студентов на лабы загоняют...
__________________
С уважением,
Vic / ut1wpr
Последний раз редактировалось ut1wpr; 03.08.2012 в 22:06.
|
|
|
|
03.08.2012, 22:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 03.08.2012 в 22:31.
|
|
|
|
03.08.2012, 23:51
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от st__1
|
Вы ничего не путаете???
Каким боком здесь EEPROM???
|
Тут ошиблись, а так да, из цикла выходило при первом нулевом значении. Переписал, картинка на экране появилась. Странно это на асме не хочет, а на Си работает, ну да ладно едем дальше.
|
|
|
|
04.08.2012, 00:05
|
|
Заблокирован
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
на асме не хочет, а на Си работает
|
А зачем этот футбол на минном поле???
Вот пока на СИ что-то получается... и не останавливайтесь... забудьте про АСМ... абстрагируйтесь...
|
|
|
|
04.08.2012, 00:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
Странно это на асме не хочет, а на Си работает
|
Не вините язык программирования, он ни при чем.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
04.08.2012, 00:12
|
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Собственно с Си и начал из-за корявости рук с асм, но скоро может автономка быть без интернета, вот и пытаюсь урвать по больше, чтобы потом в свободное время допиливать. Благодарю за помощь!
Сообщение от ut1wpr
|
Не вините язык программирования, он ни при чем.
|
само собой, вот и проверяю на нескольких, раз на одном работает, значит дело не в бабине...
Последний раз редактировалось С.М.С; 04.08.2012 в 00:14.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:42.
|
|