26.07.2013, 19:33
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
спасибо за труды - выкачаю сайто качалкой, книжка на андроиде - должна читать
|
|
|
|
26.07.2013, 19:46
|
|
Прописка
Регистрация: 14.09.2009
Адрес: Екатеринбург
Сообщений: 116
Сказал спасибо: 14
Сказали Спасибо 31 раз(а) в 15 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Там как раз char, int. Использование типов в таком виде говорит о том что человек привык писать для РС. А у МК немного по другому, поэтому лучше использовать uint8_t, int8_t и так далее
Вот выдержка из керигана
Цитата:
|
2.2. Типы и размеры данных
Языке "C" имеется только несколько основных типов дан-
ных:
CHAR один байт, в котором может находиться один символ из
внутреннего набора символов.
INT Целое, обычно соответствующее естественному размеру це-
лых в используемой машине.
FLOAT С плавающей точкой одинарной точности.
DOUBLE С плавающей точкой двойной точности.
Кроме того имеется ряд квалификаторов, которые можно ис-
пользовать с типом INT: SHORT (короткое), LONG (длинное) и
UNSIGNED (без знака). Квалификаторы SHORT и LONG указывают
на различные размеры целых. Числа без знака подчиняются за-
конам арифметики по модулю 2 в степени N, где N - число би-
тов в INT; числа без знаков всегда положительны. Описания с
квалификаторами имеют вид:
|
Последний раз редактировалось elesy; 26.07.2013 в 19:48.
|
|
|
|
26.07.2013, 19:56
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
век живи - век учись:
Неправильное использование беззнаковых целых может приводить к неочевидным ошибкам из-за возникающего переполнения. В приведённом ниже примере использование беззнаковых целых в цикле в C и C++ превращает этот цикл в бесконечный:
Код:
|
char ar[N];
for (unsigned int i = N-1; i ›= 0; --i)
ar[i] = i; |
спасибо человеку и пароходу - заставил мозги шевелится
|
|
|
|
26.07.2013, 20:00
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от oleg110592
|
спасибо человеку и пароходу
|
Скажи проще - адмиралу ...
__________________
Осторожно , злой кот
|
|
|
|
26.07.2013, 20:16
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от oleg110592
|
Неправильное использование беззнаковых целых может приводить к неочевидным ошибкам из-за возникающего переполнения.
|
http://www.pic24.ru/doku.php/osa/art...without_errors
Цитата:
|
В программе следует избегать любых конструкций, которые при прочтении могут быть истолкованы двояко, или которые смогут при определенных условиях повести себя неправильно. Самые частые допуски, которые позволяют себе программисты, - это несоблюдение границ использованных типов, путаница со знаковыми и беззнаковыми переменными, пренебрежение приведением типов. Эти допуски рассмотрим в первую очередь.
Типы данных
Нужно определять переменные тем типом, который соответствует их назначению. Например, не следует переменную, которая будет использована как числовая, определять типом char. Число может быть либо signed char либо unsigned char. Сам же char определяет символьную переменную. Понятно, что для контроллера все эти переменные – одно и то же, но для компилятора, а также для человека, читающего текст программы, - это разные вещи.
Например, типичная ошибка:
Неправильно:
char Counter;
Counter = 10;
if (Counter ›= 0) ...;
Это выражение будет правильно обрабатываться в MPLAB C18, в то время как в HT-PICC18 оно всегда будет возвращать true. Все из-за того, что в стандарте языка не оговаривается знаковость типа char, и каждый разработчик компиляторов вправе толковать его по-своему. В приведенном примере переменная должна быть определена так:
Правильно:
signed char Counter;
Counter = 10;
if (Counter ›= 0) ...;
|
Цитата:
|
переопределять типы данных. Стоит учитывать, что знаковость и размерность в стандарте языка определены для каждого типа довольно расплывчато (например, в HT-PICC18 тип char по умолчанию беззнаковый, в то время как в MPLAB C18 – знаковый; или в CCS тип int – 8-битный беззнаковый, а в остальных компиляторах – 16-битный знаковый). Поэтому в каждом проекте хорошо бы иметь h-файл с переопределениями типов
|
|
|
|
|
26.07.2013, 20:36
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
все понял - надо учится, учится..., как завещал нам великий, все о нем больше ни слова
off:
— Мальчик, ты опрокинул снежком наши стаканы.
— Дяденьки, я больше не буду!
— Да, мальчик, больше ты уже не будешь...
|
|
|
|
26.07.2013, 21:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от oleg110592
|
как завещал нам великий, все о нем больше ни слова
|
Да это не его - он у Сократа передрал.
__________________
There's always more than one way to skin a cat.
|
|
|
|
28.07.2013, 18:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от alvadep
|
Вы что-то имеете против дворников?
|
Нет, конечно. Но дворнику, если его уровень знаний — три класса ЦПШ, — не стоит заниматься программированием...
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
28.07.2013, 19:04
|
|
Прописка
Регистрация: 31.03.2005
Сообщений: 223
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 14 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Цитата:
|
Там как раз char, int. Использование типов в таком виде говорит о том что человек привык писать для РС. А у МК немного по другому, поэтому лучше использовать uint8_t, int8_t и так далее
|
Попробуйте посмотреть AN ATMEL AVR315. ТАМ почему-то по другому происходит объявление переменных...
|
|
|
|
28.07.2013, 19:22
|
|
Прописка
Регистрация: 14.09.2009
Адрес: Екатеринбург
Сообщений: 116
Сказал спасибо: 14
Сказали Спасибо 31 раз(а) в 15 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от Grey_Cat
|
Попробуйте посмотреть AN ATMEL AVR315. ТАМ почему-то по другому происходит объявление переменных...
|
там юзают uchar , что гоаорит о том что он где то определен.
те же яйца только в профиль, или вы хотели сказать что то другое?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:50.
|
|