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

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

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 ☆
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.