• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
a_sergeevich

Язык Си Для Микроконтроллеров

1 728 сообщений в этой теме

snn_krs    6

Программа работает, а символы похоже выводит драйвер клавиатуры

Clipboard02.jpg.2c790c84e1aa4668dd6609384c6d837f.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ARV    231

Да, я тоже проверил - все работает, и с файлом тоже работает. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 064
2 часа назад, ARV сказал:

но результат логического выражения всегда будет 0 или 1.

кто вам это сказал? открываем справочник по Си Шильда и читаем:

Цитата

Логические значениия ИСТИНА (True) и ЛОЖЬ (False) в языке С

При выполнении многих операторов языка С вычисляются значения условных выражений и в зависимости от полученного значения выбирается та или иная ветвь вычислительного процесса. Условное выражение может принимать одно из двух значений: ИСТИНА или ЛОЖЬ. В языке С значение ИСТИНА представлено любым ненулевым значением, включая отрицательные числа. Значение ЛОЖЬ всегда представлено нулем. Такое представление логических значений ИСТИНА и ЛОЖЬ позволяет весьма эффективно программировать многие процедуры.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
14 минуты назад, IMXO сказал:

кто вам это сказал?

https://ideone.com/86srM4 посмотрите и убедитесь.

screenshot-ideone.com-2017-10-21-21-41-58-572.png.e5715fc5845c8397959e0459e59a91f4.png

Вы спутали, как Си трактует числа в качестве логических значений, с тем, чему именно равны результаты логических выражений. Так вот, любое ненулевое число Си считает логической истиной, а в качестве логической лжи используется только 0. Но вот результат выражения "10 больше 3" будет не любое отличное от 0 число, а конкретная единичка.

Особенно смешно мои слова подтверждаются путем логических операций отрицания и двойного отрицания. Если вы согласны, что !(12) будет равно 0, то что скажете про !!(12) - по-вашему, будет 12? :)

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 064
32 минуты назад, ARV сказал:

то что скажете про !!(12)

нет такой команды ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
1 минуту назад, IMXO сказал:

нет такой команды

Не шутите так!

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
12 часа назад, ARV сказал:

Вы спутали, как Си трактует числа в качестве логических значений, с тем, чему именно равны результаты логических выражений.

А у логических выражений есть ЧИСЛЕННЫЙ результат? :)

Вы вообще о чем?

Это Вы путаете представление результата логических выражений в машине с  самим этим результатом.

Когда процессор выполняет условное ветвление при сравнении чисел, то он опирается на  значения флагов регистра состояний, а совсем не на числа.

То есть у условия НЕТ ЧИСЛЕННОГО РЕЗУЛЬТАТА. Его даже нельзя чаще всего физически получить, потому что он не сохраняется ни в каком регистре.

Присвоение единицы или нуля вместо boolean значений - это УСЛОВНОСТЬ связанная с отсутствием этого типа.

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
28 минут назад, my504 сказал:

А у логических выражений есть ЧИСЛЕННЫЙ результат? 

В языке Си - да. В языке Си любое выражение имеет численный результат.

30 минут назад, my504 сказал:

Его даже нельзя чаще всего физически получить, потому что он не сохраняется ни в каком регистре.

Это ваши фантазии, не более того.

screenshot-ideone.com-2017-10-22-10-05-25-920.png.c6c155c3f902160a1b35db5ff6f77b43.png

Пользуйтесь бесплатным онлайн компилятором Си для проверки собственных идей, чтобы не сесть в лужу с ошибочными утверждениями.

35 минут назад, my504 сказал:

Присвоение единицы или нуля вместо boolean значений - это УСЛОВНОСТЬ связанная с отсутствием этого типа

Вы можете называть условностью что угодно, но это не меняет того факта, что истинное логическое выражение в Си имеет численное значение 1, а ложное - 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 262

@ARV А теперь дизассемблируйте откомпилированный файл, и посмотрите как оттранслировался условный переход по булевой переменной. Там тупо переход по флагу Z (zero). То есть сравнение с нулём (false). А уж какой цифрой будет true - совершенно без разницы. Так что Марк (@my504 ) прав.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
42 минуты назад, ARV сказал:

В языке Си - да. В языке Си любое выражение имеет численный результат.

Пользуйтесь бесплатным онлайн компилятором Си для проверки собственных идей, чтобы не сесть в лужу с ошибочными утверждениями.

Вы можете называть условностью что угодно, но это не меняет того факта, что истинное логическое выражение в Си имеет численное значение 1, а ложное - 0.

Присвоение ПЕРЕМЕННОЙ значения логического выражения и есть условность. Да, эта условность принята в Си. Ну и что? Из этого не следует, что само условие имеет численный результат. Если процессор не в состоянии получить численный результат от выполнения логического выражения, то о каком "числе"  может идти речь? Ваша "доказательство" не стоит выеденного яйца...

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231

@oldmao@my504 , язык высокого уровня подразумевает, что все идиомы рассматриваются именно на высоком уровне. размещение результата во флаге, регистре или ячейке озу - это вопросы реализации. Главное, чтобы соблюдались требования языка, а способ этого соблюдения никого не волнует. В стандарте Си прописано то, что я пытаюсь вам втолковать: результат логического выражения есть 0 или 1, но любое не нулевое число трактуется, как логическое значение "истина". 

В привлекаете в свои рассуждения собственные домыслы... но в них полно противоречий и натяжек. Допустим, что прав@my504 , говорящий 

13 минуты назад, my504 сказал:

Если процессор не в состоянии получить численный результат от выполнения логического выражения, то о каком "числе"  может идти речь?

Тогда как объясняется приведенный мной выше скриншот, где результат арифметической суммы двух логических выражений выводится без занесения в переменную? Получается, компилятор смог получить результат? Сумел-таки из флага в регистре состояния как-то извлечь единички и просуммировать их? 

Допустим, прав @oldmao , говорящий 

34 минуты назад, oldmao сказал:

посмотрите как оттранслировался условный переход по булевой переменной

Да, переход делается по флагу в регистре состояний. Однако, точно так же по флагу будет произведен переход для if(22) или if(a*b) - то есть для АРИФМЕТИЧЕСКИХ выражений. Компилятор добавит команды, заносящие в регистр флагов нужные биты, чтобы потом по этим битам выполнить переход.

Си не делает разницы между логическими выражениями и арифметическими. Си оперирует исключительно с ЧИСЛАМИ, что бы вы там не думали себе в голове. Понимаете? Даже символ 'F' - не более чем число для языка Си, а тот факт, что вам (человекам) это преподносится как "символ" - не более чем условность.

Так вот, условности условностями, но факт, закрепленный в стандарте Си, остается фактом: результат логического выражения в Си есть число, и число это 0 или 1 в зависимости от того, ложное или истинное значение выражения получено. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
14 минуты назад, ARV сказал:

 

Да, переход делается по флагу в регистре состояний. Однако, точно так же по флагу будет произведен переход для if(22) или if(a*b) - то есть для АРИФМЕТИЧЕСКИХ выражений. Компилятор добавит команды, заносящие в регистр флагов нужные биты, чтобы потом по этим битам выполнить переход.

Как раз компилятор НИЧЕГО не добавит для выполнения логического условия, в отличии от присвоения.

В данном споре имеет значение НАТИВНОСТЬ действий процессора. Так вот присвоение значения переменной по результату логического выражения - это НЕ нативное действо, требующее дополнительных команд. Естественным является условный переход по флагу.

ЗЫ. Абстракции не должны "забывать" про допущения, на которых они построены. Иначе есть высокий риск допустить саму эту абстракцию вне этих допущений.

19 минут назад, ARV сказал:

 

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

Даладна!!!

Вы сможете сделать вывод без занесения в регистровую переменную?

Если переменная не имеет явного вида, это не значит, что ее нет.

 

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
6 минут назад, my504 сказал:

Как раз компилятор НИЧЕГО не добавит для выполнения логического условия, в отличии от присвоения.

В данном споре имеет значение НАТИВНОСТЬ действий процессора. Так вот присвоение значения переменной по результату логического выражения - это НЕ нативное действо, требующее дополнительных команд. Естественным является условный переход по флагу.

ЗЫ. Абстракции не должны "забывать" про допущения, на которых они построены. Иначе есть высокий риск допустить саму эту абстракцию вне этих допущений.

Вот  этот поток сознания - он вообще о чем? Что он доказывает или опровергает?

Предлагаю воспользоваться принципом "опыт - критерий истины". Прошу вас привести код на Си, который бы подтверждал ваши домыслы. Код, который подтверждает мои утверждения, я уже приводил дважды. Жду аналогичного от вас. Внимание: листинг ассемблера - не применять, т.к. мы говорим не об ассемблере, а о языке Си, который более-менее стандартизирован.

Я же в свою очередь поищу цитату стандарта Си, чтобы поставить точку в споре окончательно. Стандарт вас устроит в качестве непреложной истины?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Мент детектед.

Все реализации Си для эмбеддед систем имеют возможность вставок на АСМе. В этих вставках либо есть возможность получить доступ к численным значениям, либо нет. Получить доступ к результатам логических выражений невозможно, если не делать специальных присвоений.

А доказывать, что Си присваивает единицу или ноль мне не нужно, я это знаю и без Вас, есличо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
2 минуты назад, my504 сказал:

Получить доступ к результатам логических выражений невозможно, если не делать специальных присвоений

Продемонстрируйте, пожалуйста, как можно получить доступ к результату выражения (a+b) из следующего кода:

volatile int a,b,c,d;

d = (c - 2)/(a + b);

Вы ведь утверждаете, что при помощи ассемблерной вставки это можно сделать? Ну так сделайте. Тогда ваши аргументы будут иметь ценность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

А представленное выражение является логическим?

А  (a+b) являются выражением в данном примере?

Вы вообще можете изолировать логическое выражение в Си для его применения в АСМ вставке без присвоения?

АРВ, Вы ломитесь в открытую дверь.... :)

 

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231

Ну вот я нашел текст стандарта С: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

Цитирую по мере упоминаний в тексте

Цитата

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.

Результат логического отрицания ! есть 0, если значение его операнда отличается от 0, и 1, если значение его операнда эквивалентно нулю. Тип результата int

Как видите, в стандарте черным по белому написано, что логическое выражение имеет результат типа int - то есть число. И число это 1 или 0.

2 минуты назад, my504 сказал:

А представленное выражение является логическим?

Я рассуждаю так: если результат логического выражения извлечь невозможно, то предполагается, что уж результат арифметического выражения доступен. Если же не доступны результаты любых выражений, ваш аргумент превращается в тыкву и удаляется с доски. Ищите иное доказательство.

4 минуты назад, my504 сказал:

А  (a+b) являются выражением в данном примере?

Вы меня убиваете... А что же это по-вашему?! Выражением в Си является даже вот это:

int var;

var; // вот это - ВЫРАЖЕНИЕ

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Часть выражения является выражением?

Является ли выражением "а" в выражении "с=а+в"?

Является ли "=" таким выражением?

Операция присвоения является ЧИСЛЕННОЙ. Поэтому все значения прошедшие эту операцию становятся численными.

Так же как и в неявном преобразовании типов, присвоение ЧИСЛЕННЫМ переменным значений логических выражений - суть просто соглашение языка.

 

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
7 минут назад, my504 сказал:

Часть выражения является выражением?

да

8 минут назад, my504 сказал:

Является ли выражением "а" в выражении "с=а+в"

да

8 минут назад, my504 сказал:

Является ли "=" таким выражением?

Это оператор, слева и справа которого находятся выражения. Слева - леводопустимое, справа - праводопустимое.

Если же вы спорите с очевидным, то тогда почему утверждаете, что невозможно получить доступ ассемблерной вставкой к результату логического выражения

int x = a > b;

Чем логическое выражение вдруг стало отличаться от арифметического? Я же вам выше процитировал стандарт (только для оператора !, но можете посмотреть сами, для всех логических операторов то же самое: результат 1 или 0, тип int), который декларирует, что результат логического выражения есть число. А к числу доступ получить можно, т.к. число хранитсяя в регистре или ячейке памяти.

С чем вы спорите, с очевидным и стандартным?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    6
47 minutes ago, ARV said:

Если же вы спорите с очевидным, то тогда почему утверждаете, что невозможно получить доступ ассемблерной вставкой к результату логического выражения

Получить доступ конечно можно, при этом код будет примерно таким

// int x = a == b;
  mov r1, a
  mov r2, b
  sub r1, r2
// Результат в r1 и далее по флагу Z преобразование в 0 или 1

Если результат не нужен, то код будет несколько другим

// if ( a == b )
  mov r1, a
  mov r2, b
  cmp r1, r2  // Результат никуда не помещается
  jz label

В этом случае не будет преобразования типов. Поэтому код будет компактней

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    248

Давайте спишем на работу оптимизатора. Если промежуточное значение не используется, его вычисление может быть опущено. Так и тут, операция сравнения вычитает один аргумент из второго, результат является целочисленным. Далее этот результат должен бы приводиться к 0/1, но if() принимает не логические значения, а любые численные, поэтому лишнее преобразование опускается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
1 час назад, COKPOWEHEU сказал:

Давайте спишем на работу оптимизатора.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
9 часов назад, ARV сказал:

 Я об этом говорил, но товарищи не понимают...

"Не ищи дурее себя" (с)

Это так мой тесть любил говорить...

Товарищи понимают Вами изрекаемое гораздо лучше, чем Вы можете себе представить.

Могу сказать, что время на поиск проблем связанных с "нюансами реализации" компиляторов становится пренебрежимо малым, если  УГЛУБЛЯТЬСЯ в эти самые нюансы.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    231
2 часа назад, my504 сказал:

Товарищи понимают Вами изрекаемое гораздо лучше, чем Вы можете себе представить

Товарищи как собака Павлова: понимают всё, да только ничего сказать доказать не могут. Я вам приводил примеры, я вам приводил доказательства, я вам цитировал стандарт, я вас просил привести собственные доказательства - и что в ответ? В ответ упоминание тестя. Он авторитет в этом, что ли? Ваш тесть Билл Гейтс или Бьёрн Страсуструп?

Докажите ваши утверждения без абстрактных деклараций про "эмбеддед системы" - вот это будет мужской разговор, а так - детский лепет, не более.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Так уже доказали. 

Списали на оптимизацию. 

ЗЫ. Писать что то более основательное, с кодом, примерами из практики мне отчаянно лень. Тем более, что Вы традиционно не желаете слышать собеседников. 

Полагаете себя во всем правым, а свой опыт репрезентативным? Нивапрос. 

Только меня увольте. 

Изменено пользователем my504

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Артемон
      Всем привет. Просьба посодействовать в исправлении кода для термометра. Так как сам я в этом новичек, то код собирал из трех чужих проектов. Реализация такова, подключение термопары через микруху Max6675 к Atmega и вывод данных на LCD экран. В архиве прилагаю проект Atme Studio 7 и принт скрин из Протеуса. Ошибка заключается в неправильных показаниях температуры

      Test1.rar
      Вот код, чтоб не скачивать проект.

      #define F_CPU 1000000UL #include <util/delay.h> #include <avr/io.h> #include "max6675.h" #include "LCD.h" uint16_t gettemp(void); //Funktionsdeklarationen void initavr(void); //gettemp () returns absolute Temperature in Temp * 4 °C - in 1/4°-steps // uint16_t gettemp(void){ //Temperatur holen. uint8_t bit = 0, bitnr = 12; //Variablen uint8_t foo1 = 0; uint16_t Rohdata = 0; CS_Port &= ~(1 << CS); //Chip select anlegen for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen bit = 15 - foo1; //Die Aktuelle Bitnr berechnen. SCK_Port |= (1 << SCK); //SCK hi if((bit <= 14) && (bit >= 3)){ //Einfach mal die 12 relevanten von den 16 Bits ausfiltern if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann... bitnr--; //zдhlen wir runter... Rohdata |= (1 << bitnr); // und schieben eine 1 an bit x }else{ //WENN dem NICHT so ist, dann... bitnr--; //zдhlen wir runter... Rohdata &= ~(1 << bitnr); //und schieben eine 0 an bit x } }else{ //weis au nimmer, was das soll. bitnr = 12; } SCK_Port &= ~(1 << SCK); //SCK LO } CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. return Rohdata; //Das ist doch mal was ;D } // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected // (to enable this feature T- must be connected to GND) uint8_t getTC(void){ //Temperatur holen. //Variablen uint8_t TC = 0; uint8_t foo1 = 0; CS_Port &= ~(1 << CS); //Chip select anlegen for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen. SCK_Port |= (1 << SCK); //SCK hi if(foo1 == 2){ //das 3. bit ist fьr uns relevant. if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann... TC = 0; }else{ //WENN dem NICHT so ist, dann... TC = 255; } } SCK_Port &= ~(1 << SCK); //SCK LO } CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. return TC; //Das ist doch mal was ;D } //Initiates the MAX6675 and IO-pins void init_6675(void){ //AVR initialisieren SO_DDR &= ~(1 << SO); CS_DDR |= (1 << CS); SCK_DDR |= (1 << SCK); //IOs setzen SO_Port |= (1<<SO); //Pullups an. (Wichtig fьr MAX6675, der kann nicht anders, hab ich festgestellt... CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. SCK_Port &= ~(1 << SCK); //SCK LO } int main(void) { init_port();// инициализируем порт ЖКИ lcd_init();// инициализируем ЖКИ init_6675(); while (1) { char buffer[8]; int temp; temp = gettemp(); temp /=4; lcd_gotoxy(0,0);//перемещаем курсор в верхний левый угол sprintf(buffer, "t=%i\xdf\C ", temp); // так как тут не плавающая запятая то числа с запятой записываются так %i.%i, код градуса записывается так \xdf lcd_putstring(buffer); } }
      вставляете код пользуйтесь тегами [CОDE][/CОDE] редактора сообщений, кнопка <>
    • Автор: igoryan
      нужно ли обрабатывать RESET просто компилятор не видит RESET_vect?
    • Автор: P32L
      Натолкните на мысль пожалуйста.Смысл в следующем.Нужно изменять задержку(Delay) из EEPROM. Контроллер PIC , язык СИ.
      Как реализовать чтение числа из ипрома ? Если не затруднит, то кусочек кода был бы очень кстати.
    • Автор: Zver2011
      Здравствуйте! Недавно начал изучать МК AVR. Читаю книги Белова. Пользуюсь программами CVAVR и Proteus. По урокам, собирал все в железе. По готовым примерам кода конечно же мне легко учиться и все в принципе понятно из описания, хоть и в программировании не силен, но как только начинаешь создавать что то свое - начинаются проблемки.
      В общем я создаю что то вроде музыкального светильника, который должен включаться от звука (голоса). Датчик звука пытаюсь реализовать на компараторе, плавное включение света - ШИМ, а генерация мелодии (пищалки) благодаря таймеру Т1 и его прерыванию. Куски кода брал из разных чужих самоделок, вот только объединить не удается.
      В железе работает как будто цветомузыка какая-то. Мелодия не играет, Я думаю это из-за неправильной конфигурации компаратора, а также схемы. Вот это основной вопрос у меня. Ну и собственно основной цикл программы, там я думаю тоже накосячил.
      Помогите мне разобраться до конца, понять ошибки в коде, мне самому интересно вот только С - язык тяжеловатый на мой взгляд и без помощи знающих не обойтись))

      КОД.txt
    • Автор: sensey88
      Продам счетчики бета-гамма излучения новые заводская упаковка
      Си1Г (79г) 62 шт. 5000р
      Си21БГ (79г) 49 шт. 350р
      Си22БГ (79г) 70 шт. 700р
      Си3БГ (84г) 20 шт. 300р
      Си3БГ (78г) 46 шт. 250р
      Си3БГ (77г) 10 шт. 250р
      Си3БГ (79г) 18 шт. 250р
      Си3БГ (75г) 10 шт. 200р
      Си37Г (80г) 40 шт. 400р
      Си37Г (76г) 24 шт. 350р
      Си37Г (79г) 16 шт. 350р
      Си33Г (78г) 28 шт. 450р
      Си33Г (77г) 15 шт. 450р
      СБТ13 (78г) 2 шт. 3000р
      СБТ13 (76г) 3 шт. 2700р
      СБТ13 (69г) 3 шт 2500р.
      Си8Б (79г) 1 шт. 2500р
      Си8Б (78г) 1 шт. 2500р
      СБТ10 (79г) 3 шт. 4500р
      8 (910) 7051241 Евгений
      bishop-x@yandex.ru