Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Результаты опроса: Друзья, на какой плате будем учиться «строить монстров»?
Будем делать свою плату! 19 59.38%
Лут яд! http://starterkit.ru/html/index.php?...&op=view&id=27 13 40.63%
Голосовавшие: 32. Вы ещё не голосовали в этом опросе

 
Опции темы
Непрочитано 01.11.2010, 14:33  
million68
Прохожий
 
Регистрация: 07.02.2007
Сообщений: 1
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
million68 на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Самое лучшее что можно сделать с LPCXpresso Board for LPC1768, разломать пополам и использовать раздельно (в разных проектах).
Реклама:
million68 вне форума  
Непрочитано 01.11.2010, 19:39  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

«СИ»мфония №2 для веалончели со скрипкой!
//---------------------------------------------------------

Мне говорят "безумец" и "фантаст",
Но выйдя из зависимости, (алкоголя) грусной.
С годами, мозг мыслителя искусный,
Мыслителя искусственно создаст!


//--------------------------------------------------------
Я обещал поговорить об операторах "си"
Ну так чтож......................

В си любое выражение, которое заканчивается точкой с запятой, является оператором.

Выполнение оператора выражение заключается в вычислении выражения. Полученное значение выражения никак не используется, поэтому, как правило, такие выражения вызывают побочные эффекты. Заметим, что вызвать функцию, невозвращающую значения можно только при помощи оператора выражения.

Примеры:

PHP код:
++ i
Этот оператор представляет выражение, которое увеличивает значение переменной i на единицу.

PHP код:
a=cos(5); 
Этот оператор представляет выражение, включающее в себя операции присваивания и вызова функции.

PHP код:
a(x,y); 
Этот оператор представляет выражение, состоящее из вызова функции.
Оператор if

Формат оператора:

PHP код:
if (выражениеоператор-1; [else оператор-2;] 
Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.

- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.

После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

Пример:

PHP код:
                  if (‹ j)   i++:

                  else { 
i-3;   i++; } 
Этот пример иллюстрирует также и тот факт, что на месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.

Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.

Примеры:

PHP код:
        int main ( )

         {

           
int t=2b=7r=3;

             if (
tb)

              {

                  if (
‹ r)  r=b;

              }

             else 
r=t;

           return (
0);

         } 
В результате выполнения этой программы r станет равным 2.

Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:

PHP код:
        int main  ( )

         {

           
int t=2,b=7,r=3;

           if ( 
a)

               if ( 
‹ t=b;

               else       
r=t;

           return (
0);

          } 

В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.

Следующий фрагмент иллюстрирует вложенные операторы if:

PHP код:
     char ZNAC;

     
int x,y,z;

       :

      if (
ZNAC == '-'z;

      else  if (
ZNAC == '+'z;

            else if (
ZNAC == '*'z;

                  else if (
ZNAC == '/'z;

                        else ... 

Из рассмотрения этого примера можно сделать вывод, что конструкции использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.
Оператор switch

Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:

PHP код:
     switch ( выражение )

     {   [
объявление]

              :

           [ case  
константное-выражение1]: [ список-операторов1]

           [ case  
константное-выражение2]: [ список-операторов2]

              :

              :

           [ default: [ 
список операторов ]]

     } 

Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.

Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.

Так как константное выражение вычисляется во время трансляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.

Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default.

Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.

Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.

Схема выполнения оператора switch следующая:

- вычисляется выражение в круглых скобках;

- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;

- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.

Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.

Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.

Пример:

PHP код:
      int i=2;

      switch (
i)

        {

         case 
1+= 2;

         case 
2*= 3;

         case 
0/= 2;

         case 
4-= 5;

         default:      ;

     } 

Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.

Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch.

PHP код:
     char ZNAC;

     
int x,y,z;

     switch (
ZNAC)

     {

          case 
'+':  z;    break;

          case 
'-':  z;    break;

          case 
'*':  z;    break;

          case 
'/':  z;    break;

          default : ;

        } 

Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch.

Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.

Пример:

PHP код:
       :

     switch (
a)

      {

        case 
1b=c; break;

        case 
2:

            switch (
d)

            {   case 
0:  f=s;  break;

                case 
1:  f=9;  break;

                case 
2:  f-=9; break;

            }

         case 
3b-=c; break;

         :

      } 
Оператор break

Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
Оператор for

Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:

for ( выражение 1 ; выражение 2 ; выражение 3 ) тело

Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.

Схема выполнения оператора for:

1. Вычисляется выражение 1.

2. Вычисляется выражение 2.

3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.

Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.

Пример:

PHP код:
       int main()

       { 
int i,b;

          for (
i=1i10i++)

             
b=i*i;

          return 
0;

       } 

В этом примере вычисляются квадраты чисел от 1 до 9.

Некоторые варианты использования оператора for повышают его гибкость за счет возможности использования нескольких переменных, управляющих циклом.

Пример:

PHP код:
       int main()

       {  
int top,  bot;

          
char string[100],  temp;

          for ( 
top=0bot=100 top ‹ bot top++, bot--)

          {  
temp=string[top];

             
string[bot]=temp;

          }

          return 
0;

        } 

В этом примере, реализующем запись строки символов в обратном порядке, для управления циклом используются две переменные top и bot. Отметим, что на месте выражение 1 и выражение 3 здесь используются несколько выражений, записанных через запятую, и выполняемых последовательно.

Другим вариантом использования оператора for является бесконечный цикл. Для организации такого цикла можно использовать пустое условное выражение, а для выхода из цикла обычно используют дополнительное условие и оператор break.

Пример:

PHP код:
       for (;;)

       { ...

         ...  break;

         ...

       } 

Так как согласно синтаксису языка Си оператор может быть пустым, тело оператора for также может быть пустым. Такая форма оператора может быть использована для организации поиска.

Пример:

PHP код:
for (i=0t[i]‹10 i++) ; 
В данном примере переменная цикла i принимает значение номера первого элемента массива t, значение которого больше 10.
Оператор while

Оператор цикла while называется циклом с предусловием и имеет следующий формат:

while (выражение) тело ;

В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:

1. Вычисляется выражение.

2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.

3. Процесс повторяется с пункта 1.

Оператор цикла вида

for (выражение-1; выражение-2; выражение-3) тело ;

может быть заменен оператором while следующим образом:

PHP код:
           выражение-1;

           while (
выражение-2)

           {  
тело

              выражение
-3;

           } 

Так же как и при выполнении оператора for, в операторе while вначале происходит проверка условия. Поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять.

Внутри операторов for и while можно использовать локальные переменные, которые должны быть объявлены с определением соответствующих типов.
Оператор do while

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do тело while (выражение);

Схема выполнения оператора do while :

1. Выполняется тело цикла (которое может быть составным оператором).

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Операторы while и do while могут быть вложенными.

Пример:

PHP код:
       int i,j,k;

       ...

       
i=0;  j=0;  k=0;

       do { 
i++;

            
j--;

            while (
a[k] ‹ i)  k++;

           }

       while (
i30 && j‹-30); 

Оператор goto

Использование оператора безусловного перехода goto в практике программирования на языке СИ настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

Формат этого оператора следующий:

PHP код:
       goto имя-метки;

                  ...

       
имя-меткиоператор
Оператор goto передает управление на оператор, помеченный меткой имя-метки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно имя-метки не может быть использовано для разных операторов программы. Имя-метки - это идентификатор.

Любой оператор в составном операторе может иметь свою метку. Используя оператор goto, можно передавать управление внутрь составного оператора. Но нужно быть осторожным при входе в составной оператор, содержащий объявления переменных с инициализацией, так как объявления располагаются перед выполняемыми операторами и значения объявленных переменных при таком переходе будут не определены.
__________________
Я бы изменил весь мир, но бог не дал исходников

Последний раз редактировалось Uragan90; 01.11.2010 в 19:48.
Uragan90 вне форума  
Непрочитано 01.11.2010, 23:51  
roxfan
Временная регистрация
 
Регистрация: 25.11.2009
Сообщений: 61
Сказал спасибо: 1
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
roxfan на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Может стоит переименовать тему в "учебник по языку Си"?
roxfan вне форума  
Непрочитано 02.11.2010, 00:30  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Вообще учебников Си в сети масса. Язык сам по себе - простейший. Несколько типов данных да десяток операторов. Изучение самого языка займет всего пару часов. Изучение самого программирования - пару лет.
Кроме того неплохо чтоб учитель сам знал язык А то смешно читать:
Сообщение от Uragan90 Посмотреть сообщение
В си любое выражение, которое заканчивается точкой с запятой, является оператором.
Однако.
Код:
volatile unsigned char Var; // это оператор????
 int main(void)
{
...
Var; // может это оператор? Конструкция  в Си допустимая.
}
Дальше и читать не стал. Есть книга Кернигана и Ричи, есть несколько других более-менее приличных. Изучать язык по ним предпочтительнее. Если хочется быстро - по чужим исходникам, а книги как справочник непонятностей. Школы и Курсы - смех один.
kison вне форума  
Непрочитано 02.11.2010, 01:10  
projects.org.ua
Заблокирован
 
Регистрация: 15.10.2010
Адрес: Kiev/Kharkov
Сообщений: 133
Сказал спасибо: 15
Сказали Спасибо 21 раз(а) в 21 сообщении(ях)
projects.org.ua на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Сообщение от kison Посмотреть сообщение
Вообще учебников Си в сети масса. Язык сам по себе - простейший. Несколько типов данных да десяток операторов. Изучение самого языка займет всего пару часов. Изучение самого программирования - пару лет.
а также опыт что бы писать, да что бы не как попало, а придерживаясь код стандартов, по причинам
1 - правильность и удобство чтения кода
2 - безопасность выполнения, работы самого кода

Сообщение от kison Посмотреть сообщение
Есть книга Кернигана и Ричи, есть несколько других более-менее приличных. Изучать язык по ним предпочтительнее. Если хочется быстро - по чужим исходникам, а книги как справочник непонятностей.
тоже верно, но по рабочему коду лучше, там же и стиль смотреть
идеально подходят OpenSource программы, а также исходники в линуксе(лучше всего), я еще лучше - ядро линукса

А вообще тему по С - нужно отделять от топика.
projects.org.ua вне форума  
Непрочитано 02.11.2010, 01:18  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

А может ну его этот си. Я думаю что те кто решил работать с LPC1768 язык Си прекрасно знают. А кто не знает то может и не нужно сразу начинать так круто.
Лучше давайте по существу - каким компилятором пользоваться его особенности и функции, чем отлаживать, как прошивать,чтоб народ пока ждет платы уже подготовил ПО и начал в нем более менее ориентироваться.
Тема конечно очень интересная, главное чтоб у автора энтузиазм не пропал.
Zemlyanov вне форума  
Непрочитано 02.11.2010, 10:36  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Сообщение от Uragan90 Посмотреть сообщение
Процессор, который мы с вами будем мучить, выбрал, наконец-таки это LPC1768.
Скажите пожалуйста, из каких соображений именно этот? Просто хочу перейти к изучению ARM, и приобрести плату. Но не знаю какую. На STM32F107 или LPC1768.
andries5 вне форума  
Непрочитано 02.11.2010, 12:15  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

andries5, Уже объяснялось, LPC1768 это очень богатый периферией и очень совместимый аппаратно с другими семействами LPC проц. И цена радует (ну не считая цены на демо плату) м ядро как раз то что надо для эмбедера.

На STM перейти потом будет не проблема.
__________________
Найди путь или проложи сам!
MasterMushi вне форума  
Непрочитано 02.11.2010, 15:58  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Сообщение от MasterMushi Посмотреть сообщение
На STM перейти потом будет не проблема.
А будет смысл переходить? Если да, то может лучше сразу? Меня больше интересует возможность обмена данными с компом по USB. В каком это удобнее?
andries5 вне форума  
Непрочитано 02.11.2010, 17:44  
EugenyAM
Временная регистрация
 
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
EugenyAM на пути к лучшему
По умолчанию Re: Школа АRMрестлинга

Сообщение от andries5 Посмотреть сообщение
Меня больше интересует возможность обмена данными с компом по USB. В каком это удобнее?
На LPC17xx есть ROM BIOS - прошиты базовые функции работы с классами HID и Mass Storage. Последний используется в том числе для перепрошивки Flash. Для всего остального есть примеры от Keil
EugenyAM вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Си - это сложно и непонятно или нет? Easyrider83 Микроконтроллеры, АЦП, память и т.д 146 29.10.2010 01:17


Часовой пояс GMT +4, время: 07:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot