LINUX.ORG.RU

delay stm32f103

 ,


0

1

здрасьте здрасьте люди добрые. ну вот и ожидаемая тема с просьбой помочь разобраться в задержках для stm32f103. пытался реализовать с помощью циклов, но получается что-то уж очень не настраиваемое и время задежки очень мало. нашел что правильно делать delay нужно с помощью systick, но открыв RM в упор не вижу адресов регистро, что очень странно. нагуглил какие-то адреса

0xE000E010 ;	Systick_Control_and_Status_Register
0xE000E014 ;  	Systick_Reload_Value_Register
0xE000E018 ;    Systick_Current_Value_Register
0xE000E01C ;    Systick_Calibration_Value_Register
если я хочу чтобы светодиод вспихивал и и гас через 2сек то как правильно нужно написать и расчитать? поправте пожалуйста для начала надо в SYST_CSR в нулевой бит записать '1' и в первый бит также '1'.
адрес SYST_CSR=0xE000E010

.cpu cortex-m3
.thumb
.word 0x2000000
.wort _start

.section .text
.global _start
_start:



mov r5, =0xE000E010
mov r1, #1
str r1, [r5];  пальцем в небеса! ну пусть я попаду в нулевой бит, а как высчитать первый бит?
у меня вопрос к вам, уважаемые форумчане, вот адрес SYST_CSR=0xE000E010, как высчитать его первый, второй и последующие нужные биты? только с помощью побитовых операций? если есть другой способ и описан в документации, то пожалуйста скажите в какой именно ?



Последнее исправление: Assembler (всего исправлений: 1)

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

Если не секрет, на ассемблере по религиозным причинам пишите или по идеологическим?

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

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

ок. для меня MK-темный лес. ну раз уж залез, то пытаюсь понять, как же можно с помощью прерываний сделать чтобы светодиод мигал через 2 сек?

на ассемблере по религиозным причинам пишите или по идеологическим?

а какие альтернативы? CИ? очень сложный. я не осилю его макросы длиной в 20 символов. все эти библиотеки для настоящих спецов. я же простой клоун.

Assembler
() автор топика

открыв RM в упор не вижу адресов регистро, что очень странно

SysTick – это часть ядра Cortex, про него написано в Programming Manual.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

SysTick не умеет генерить ШИМ. А ему нужен ШИМ, чтобы полностью аппаратно мигать светодиодом. Еще можно через DMA менять частоту — тогда будет прикольная псевдорандомная мигалка.

Что-то вроде такого:

static inline void tim1_setup(){
    RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable TIM1 clocking
    TIM1->PSC = 8;  // 8MHz
    TIM1->ARR = 99; // 100 ticks for 80kHz
    TIM1->CCR1 = 49; // 50%
    // PWM mode 1 (active->inactive)
    TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
    // main output
    TIM1->BDTR = TIM_BDTR_MOE;
    // main PWM output
    TIM1->CCER = TIM_CCER_CC1E;
    // turn it on
    TIM1->CR1 = TIM_CR1_CEN;
    TIM1->EGR |= TIM_EGR_UG; // generate update event to refresh all
}

Естественно, здесь нет ничего сложного, так что в асм перевести - дело плевое.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 2)
Ответ на: комментарий от Assembler

Между прочим, все это есть (и со значительно более подробными комментариями) в сниппетах!

Качай, изучай.

Да, в моем примере еще нужно ногу настроить на alternate function, чтобы работал ШИМ на выход.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Assembler

а какие альтернативы? CИ? очень сложный. я не осилю его макросы длиной в 20 символов. все эти библиотеки для настоящих спецов. я же простой клоун.

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

Вариант 1.

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

Вариант 2.

Возьмите Arduino. С точки зрения «нормального» программиста это лютый шлак, но для примитивных задач типа мигания светодиодиком - самое то. Порог вхождения очень низкий. Учиться программированию на нем не советую, а вот по-быстрому наговнякать, не вникая - сойдет.

Vit ★★★★★
()
Ответ на: комментарий от Vit

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

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

Какие прерывания? Он цикл для длинной паузы написать не может.

anonymous
()
Ответ на: комментарий от anonymous

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

Vit ★★★★★
()
Ответ на: комментарий от Vit

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

Это не бегинер. Это или тролль, или тормоз с отклонениями, который никого не слушает и ничему не учится. Метапрогов с лизами мало? Да и те хоть как-то прогрессируют по сравнению…

anonymous
()
Ответ на: комментарий от anonymous

Мне без разницы какие ты для себя отмазки придумываешь. Это конечно твое дело, как развлекаться, но поскольку ты написал почему-то мне, то мое мнение тут.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Автору темы твои советы про куб и ардуину побоку, а для остальных новичков они самоочевидны, так что иди себе с миром.

anonymous
()
Ответ на: комментарий от anonymous

Автору темы твои советы про куб и ардуину побоку, а для остальных новичков они самоочевидны, так что иди себе с миром.

Для меня в свое время были абсолютно не очевидны. Наоборот, очевидным было (да и остается) начало с нуля, с регистров. Да, шаблон без HAL’а пришлось поискать.

COKPOWEHEU
()
Ответ на: комментарий от anonymous

или тормоз с отклонениями

разве это повод, чтобы не помогать ему(мне) в изучении stm32? зачем помогать умному? умный и так все знает и может. умному ваши советы не нужны, даже скорее оскорбительны и смешны, но вы все равно упорно пытаетесь помогать лишь умным. Дураку(мне) ваши советы как слово божье! в них я вижу великую мудрость и смысл! но вы лушче будете помогать умному, который шлет вас в пешее путешествие с вашими советами, чем мне, который верит вам и считает вас понастоящему умными людьми.

Assembler
() автор топика
Ответ на: комментарий от Assembler

Будет ли кто-то помогать ученику в автошколе, который спустя год путает педали и говорит, что дорожные знаки не нужны и можно обойтись в городе без них? Особенно, если он подтрунивает на нормальными советчиками и восхваляет гонщика, который зажигает светодиод в 30 байт кода. Хоть бы книжку почитал, что ли. Их для STM32 небось чуть более, чем одна.

А уж битовую арифметику можно за вечер освоить на уровне включить/выключить бит, что ее бояться и пользоваться костылями?

anonymous
()
Ответ на: комментарий от Assembler

разве это повод, чтобы не помогать ему(мне) в изучении stm32?

Так вы же не пытаетесь изучать контроллер. Сколько раз вам говорили не гоняться за bitband? Это уход в сторону, который никак не продвинет вас в обучении. Сколько раз вам говорили использовать именованные константы вместо магических чисел.

Когда все советы игнорируются, желание помогать как-то пропадает.

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

COKPOWEHEU
()
Ответ на: комментарий от anonymous

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

что-то совсем не в тему.

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

мне просто иногда обидно, что люди заходят, кидают какие-то ссылки, которые совсем никак не могут помочь

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

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Когда все советы игнорируются

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

аргументировать почему он им не воспользуется

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

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

Может тебе еще денег на карту перевести? Зуммеры привыкли, что им все вокруг что-то должны.

anonymous
()
Ответ на: комментарий от anonymous

читай чужой код

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

 вав, вав! рррр! вав, вав!
[/cod]
собственно иногда так и происходит. но я прошу: господа! давайте говорить правильно! напишите лучше пример.

Assembler
() автор топика
Ответ на: комментарий от Assembler

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

Здесь никому не интересно моргать светодиодами на асме, прости. Время потратится, а толку никакого.

anonymous
()
Ответ на: комментарий от Assembler

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

Если говорить лично про меня, то «первые попавшиеся ссылки» скорее всего будут просмотрены ранее, что и будет сказано с пояснением каким именно критериям они не удовлетворяют.

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

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

Разумеется, нет!

Это было бы верно если код содержит какие-то неочевидные грабли и написать его из головы сложно, а готовые решения найти сложно. Это относится к изначальному шаблону кода с makefile’ом, startup’ом и т.д. Но вы же не это запрашиваете, а ШИМ, который является отличным антипримером: его несложно написать по даташиту, и готовых примеров кода завались.

аргументируют, чтобы убедить, переубедить.

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

COKPOWEHEU
()
Ответ на: комментарий от anonymous

Зуммеры привыкли, что им все вокруг что-то должны.

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

Assembler
() автор топика
Ответ на: комментарий от Vit

Разве я хоть раз интересовался твоим мнением? Ты мне не интересен и не полезен.

Взаимно.

anonymous
()
Ответ на: комментарий от anonymous

Время потратится

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

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

Это ты своими ужимками с «умными», «пару строк кода», «вы не с этого форума» пытаешься выклянчать готовое решение?

anonymous
()
Ответ на: комментарий от anonymous

Это ты своими ужимками с «умными»

cчитал бы иначе, меня бы уже давно тут небыло. в жизни хватает дураков, как я сам. зачем бы мне еще на форуме с ними общаться?

«пару строк кода»

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

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

anonymous
()
Ответ на: комментарий от anonymous

Ты за все это время уже 10 раз бы разобрался с ШИМ вместо постинга.

отдыхать тоже нужно. приятно поговорить с умными людьми хоть и не на языке кода.

Assembler
() автор топика
Ответ на: комментарий от Assembler

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

Так правильнее будет.

COKPOWEHEU
()
Ответ на: комментарий от anonymous

Подумай, почему именно тебе (больше) не хотят помогать.

покажи пожалуйста тему , где мне реально помогали? кроме той, где Anonymous и пара человек написали и кинули бинарник, чтобы проверить контроллер. восновном ЗАБАНЬСЯ ДЕБИЛ. и так все время. Может дело не во мне? может я просто выдаю назад то что в меня насрали? так что идите мимо, если вам сложно писать на ассемблере.

Assembler
() автор топика
Ответ на: комментарий от Assembler

собаки общаются лаем, кошки мяуканием, а программисты общаются кодами

тебе сто раз сказали - не связывайся с bit band, только усложнит понимание а ты всё равно на нём делаешь - кому охота считать эти дурацие адреса за тебя ? В асме можно сишные именованные константы использовать, libopencm3 навскидку ближе всего что подойдёт. Скачай её и распакуй

wget https://github.com/libopencm3/libopencm3/archive/refs/heads/master.zip`
unzip master.zip

убери всё ненужное в хидерах для твоего камня

cd libopencm3-master/include/libopencm3/stm32/f1/
for f in *.h; do grep "#define" $f | sed 's/MMIO8\|MMIO16\|MMIO32//' > $(basename $f .h).inc; done

это создаст копии хидеров .h но без сишного кода и с расширением .inc

Пример использования - включение тактирования port C

blinky.S

.syntax unified
.cpu cortex-m3
.thumb
.global _start

#include <libopencm3/stm32/f1/memorymap.inc>
#include <libopencm3/stm32/f1/rcc.inc>

.text
    stack_pointer_value:    .word   0x20005000
    reset_vector:           .word   _start + 1

    _start:
        ldr    r1, =RCC_APB2ENR
        ldr    r0, [r1]
        orr    r0, r0, #RCC_APB2ENR_IOPCEN
        str    r0, [r1]

blink:
        b blink

сборка как раньше, только через препроцессор пропустить перед сборкой

$ cpp -I ./libopencm3-master/include -x assembler-with-cpp blinky.S -o blinky.s

$ arm-none-eabi-as blinky.s -o blinky.o
$ arm-none-eabi-ld blinky.o -Ttext=0x08000000 -o blinky.elf
$ arm-none-eabi-objcopy -O binary blinky.elf blinky.bin
anonymous
()
Ответ на: комментарий от COKPOWEHEU

а могут только списывать

я по определению не могу списывать, потому что ничего не пишу. я не программист. я не пишу код. я лишь прошу говорить правильно на языке кода. и делать это кратко красиво, без болтологии. вот например вы же просите иногда привести пример собеседника, чтобы понять о чем он говорит? пример, -это как прицел, из всего остального ненужного он помогает увидеть цель, то есть главное. ты сразу понимаешь о чем была речь.

Assembler
() автор топика
Ответ на: комментарий от anonymous

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

спасибо. но щас уже не нужно наверное

Ты напряг людей и перегорел всего за 6 часов? Школьник?

anonymous
()
Ответ на: комментарий от anonymous

перегорел всего за 6 часов?

нет. просто я решил изучать для себя без библиотек, IDE и прочего.

уважаемый Эдуард выше посоветовал ШИМ, что ж, это дельный совет. задержки уже делал через циклы. наигрался. просто решил шагнуть немного дальше. но без библиотек. а так спасибо конечно же огромное.

Assembler
() автор топика
Ответ на: комментарий от Assembler

я по определению не могу списывать, потому что ничего не пишу

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

COKPOWEHEU
()
Ответ на: комментарий от Assembler

нет. просто я решил изучать для себя без библиотек, IDE и прочего.

Библиотеки с готовым кодом это одно - для понимания алгоритмов полезно переписать это руками.

Но переписывать адреса?! Чему на этом можно научиться? Скорости печати?

COKPOWEHEU
()
Ответ на: комментарий от Assembler

нет. просто я решил изучать для себя без библиотек, IDE и прочего.

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

anonymous
()
Ответ на: комментарий от Assembler

уважаемый Эдуард выше посоветовал ШИМ

ты просто ещё не понял что чем дальше в лес тем толще палки - ты помрёшь всё вручную считать. Делаешь хидеры для таймера

cd libopencm3-master/include/libopencm3/stm32/common
for f in *.h; do grep "#define" $f | sed 's/MMIO8\|MMIO16\|MMIO32//' > $(basename $f .h).inc; done

берёшь код эдека и переписываешь на асме

.syntax unified
.cpu cortex-m3
.thumb
.global _start

#include <libopencm3/stm32/f1/memorymap.inc>
#include <libopencm3/stm32/f1/rcc.inc>
#include <libopencm3/stm32/common/timer_common_all.inc>

.text
    stack_pointer_value:    .word   0x20005000
    reset_vector:           .word   _start + 1
    
    _start:
@ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable TIM1 clocking
	ldr    r1, =RCC_APB2ENR
	ldr    r0, [r1]
	orr    r0, r0, #RCC_APB2ENR_TIM1EN
	str    r0, [r1]

@ TIM1->PSC = 8;  // 8MHz
	ldr    r1, =TIM1_PSC
	ldr    r0, =8
	str    r0, [r1]

@ TIM1->ARR = 99; // 100 ticks for 80kHz
	ldr    r1, =TIM1_ARR
	ldr    r0, =99
	str    r0, [r1]

@ TIM1->CCR1 = 49; // 50%
	ldr    r1, =TIM1_CCR1
	ldr    r0, =49
	str    r0, [r1]

@ TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
	ldr    r1, =TIM1_CCMR1
	ldr    r0, =(TIM_CCMR1_OC1M_PWM1 | TIM_CCMR1_OC1PE)
	str    r0, [r1]

@ TIM1->BDTR = TIM_BDTR_MOE;
	ldr    r1, =TIM1_BDTR
	ldr    r0, =TIM_BDTR_MOE
	str    r0, [r1]

@ TIM1->CCER = TIM_CCER_CC1E;
	ldr    r1, =TIM1_CCER
	ldr    r0, =TIM_CCER_CC1E
	str    r0, [r1]

@ TIM1->CR1 = TIM_CR1_CEN;
	ldr    r1, =TIM1_CR1
	ldr    r0, =TIM_CR1_CEN
	str    r0, [r1]

@ TIM1->EGR |= TIM_EGR_UG;  // generate update event to refresh all
	ldr    r1, =TIM1_EGR
	ldr    r0, [r1]
	orr    r0, r0, #TIM_EGR_UG
	str    r0, [r1]

blink:
        b blink
anonymous
()
Ответ на: комментарий от COKPOWEHEU

могут оказать в дальнейшем, пропадет впустую.

о чем вы говорите? может слова этого человека будут более доходчивыми до вас

Подумай, почему именно тебе (больше) не хотят помогать.

delay stm32f103 (комментарий)

вы сейчас официально признали

что именно? что я не программист? что ж, я официально признаю, что я клоун! я не программист. и не буду вам конкурентом в области программирования МК но вам как моему коллеге-клоуну, я могу доставить неудобства на арене цирка хотя некоторые ваши посты заставляют меня напрячься, ибо думаю, что зритель охотнее пойдет на вас, так как вы смешнее.

Assembler
() автор топика
Ответ на: комментарий от anonymous

>ты помрёшь никто не вечен) за код на ассемблере спасибо. иногда думаю, что это произведение искусства. хотя некоторое считают это ремеслом.

Assembler
() автор топика
Ответ на: комментарий от Assembler

вы сейчас официально признали

что именно? что я не программист?

Я же цитировал - что вы ничего не пишете и не собираетесь писать код.

я не программист. и не буду вам конкурентом в области программирования МК

Разумеется, хотя бы потому что для меня это всего лишь хобби.

вам как моему коллеге-клоуну,

Не волнуйтесь, в этом я вам не конкурент. Хотя клоун из вас не лучше, чем программист. Старайтесь лучше.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Хотя клоун из вас не лучше, чем программист.

я вот не понимаю, о чем вы думаете, в таком случае, когда говорите

писать код вы и не думаете.

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

Assembler
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.