Перейти к содержанию

Jabus

Members
  • Постов

    11
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Jabus

    rcall

    я предположил т.к. rjmp и jmp переходят по байтам.

    но проблемы продолжаются. компилятор что-то делает с командами sts и lds, если рядом дотрагивались до одних и тех же переменных.5d16833fdc49c_.thumb.png.a72341be2fa92f8feb66dd26d0720497.png

    rcall

    я уже понял свою ошибку, у меня была проблема, что я вытаскивал данные из стека (после rcall), там был адрес в словах, а я думал в байтах

    rcall

    знаю какие у меня кривые руки, так что не бомбите а укажите где ошибка

    вот код (написан в arduino IDE для вывода данных)
    void setup(){
      uint16_t t;
      Serial.begin(115200);
      asm volatile(
        "RCALL .+0  \n"
        "POP %B[a]  \n"
        "POP %A[a]  \n"
        :
        [a] "+r" ((uint16_t)t)
      );
      Serial.println(t,HEX);
    }

    void loop(){}

    изображение.png

    rcall

    5 часов назад, my504 сказал:

    Это ВСЕГО четыре слова. Чтобы они суммировались, нужна вложенность функций. 

    И таки да, если ОЗУ крошечное, то оно может быстро закончиться. И произойдет это совсем не из-за стека. 

    ОЗУ нужно выбирать под задачу и используемый язык написания кода.

    Ну и учитывать уровень оптимизации, канешна. 

     

    если не ошибаюсь стек идет с конца озу и ниже, и если будет 3-4 вложенные функции то 6*4=24 байта, если там будут лежать переменные то он и покоцает.

    rcall

    void u32_color(uint32_t h){
        R_color=*(h+0);
        G_color=*(h+1);
        B_color=*(h+2);
    }

    18 часов назад, солар сказал:

    Оставляем на стеке адрес. Остается вопрос - зачем два раза.

    Сишную программу можно увидеть?

     

    17 часов назад, my504 сказал:

    четыре раза pop  r0  перед выходом исключают переполнение,  выравнивая количество записей-чтений стека.

    считай при выполнение каждой такой функции минимум 6 байт в озу,ну а если много таких функций будет? стек может залезть на переменные... в attiny13 такое запросто провернуть, там всего 64 байта.

  1. Приспичило мне опять написать про тинкер кад. на сей раз я уже поставил 2 осциллографа, чтобы не писали "а как же ты видешь ты что они ни работают?7??7?".
    на первом осциллографе видно как дергает с помощью "sbi, cbi", на втором как с помощью "out".

    (если прям совсем не понятно через "out" - работает, "sbi, cbi" - нет)

     

    Безымянный.png

  2. Только что, Геннадий сказал:

    Пример кода где? Они не могут не работать. Вы их можете не правильно применять.

    вот, надеюсь все видно...

    я за этим и обратился, исправте если возможно.

    Screenshot_20190402-101944.jpg

  3. тут проблема такая. Я обычно в тинкер кад всякие куски кода и столкнулся с проблемой, что sbi и cbi не работают (если гонять в loop). скринов пока нет, они на пк.

×
×
  • Создать...