Оптимальный старт в программировании МК на С
26.07.2013, 19:33
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
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.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от oleg110592
|
|
спасибо человеку и пароходу
|
Скажи проще - адмиралу ...
__________________
Осторожно , злой кот
|
|
|
|
26.07.2013, 20:16
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
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.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
все понял - надо учится, учится..., как завещал нам великий, все о нем больше ни слова
off:
— Мальчик, ты опрокинул снежком наши стаканы.
— Дяденьки, я больше не буду!
— Да, мальчик, больше ты уже не будешь...
|
|
|
|
26.07.2013, 21:41
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от oleg110592
|
|
как завещал нам великий, все о нем больше ни слова
|
Да это не его - он у Сократа передрал.
__________________
There's always more than one way to skin a cat.
|
|
|
|
28.07.2013, 18:43
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Оптимальный старт в программировании МК на С
Сообщение от alvadep
|
|
Вы что-то имеете против дворников?
|
Нет, конечно. Но дворнику, если его уровень знаний — три класса ЦПШ, — не стоит заниматься программированием...
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
28.07.2013, 19:04
|
|
|
Прописка
Регистрация: 31.03.2005
Сообщений: 219
Сказал спасибо: 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, время: 04:03.
|
|