Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегестрированные - Нет
Ответить с цитатой

Николай
 


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

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

ну тупо интересно жеж. вон ардуинщики первый "хелоуворлд" делают софтовое мигание светика. это тоже типа хелоуворлда.

Добавлено: Thu Mar 16, 2017 7:59 pm
Ответить с цитатой

Behram
 


Николай писал(а):
А вот собсно говоря и сам текст.
Хитрая функция задержки отлично

Добавлено: Thu Mar 16, 2017 8:05 pm
Ответить с цитатой

Electricman
Бес заземления


2.5 года назад делал.

https://www.youtube.com/watch?v=9U9KI7_dFxE

Добавлено: Thu Mar 16, 2017 8:26 pm
Ответить с цитатой

SilverRay
 


На Си не писал очень давно, так что в порядке бреда -- что получится, если в функции main Николая попробовать такое извращение:

Код:

int main()
 {
   unsigned char p, i;
   DDR |= (1<<PIN);         //Устанавливаем пин как выход
 rep:
     p = ((++i) &= 1);
     PORT = p;      //Тогглим светодиод
     Delay();            //Ждем одну секунду
     if (!p) Delay();    // Ждем вторую секунду
     goto rep;


Добавлено: Thu Mar 16, 2017 8:39 pm
Ответить с цитатой

Behram
 


Лол, у меня код Николая скомпилился в 78 байт смех
SilverRay, твое не компилится, в строке p = ((++i) &= 1) ошибка ../blink.c:25:6: error: lvalue required as left operand of assignment

Добавлено: Thu Mar 16, 2017 8:45 pm
Ответить с цитатой

SilverRay
 


Вот, кстати, это то, что почему-то не обсудили -- одинаковость сред и настроек компилятора/линкера. Что там со всякими оптимизациями получается?

Добавлено: Thu Mar 16, 2017 8:48 pm
Ответить с цитатой

Behram
 


У меня WinAVR-20100110, добавил в настройки компилятора -fdata-sections и -ffunction-sections, в настройки линкера -Wl, -gc-sections, правда моему коду это не помогло смех
Хм, убрал, все равно 78 байт.

Добавлено: Thu Mar 16, 2017 8:56 pm
Ответить с цитатой

Николай
 


ну я вообще ничего не трогал в настройках. тупо флаг оптимизации по объему -Os и все.
стоковые настройки из протеуса.


ну значит 78. ну чтож. это охуйетительно

Добавлено: Thu Mar 16, 2017 9:09 pm
Ответить с цитатой

Николай
 


2SilverRain

привел твою конструкцию к минимализму, всеравно на 2 байта больше.
Код:
:rep
PORT = p;      //Тогглим светодиод
 Delay();            //Ждем одну секунду
 p = ~p;
 if (p) Delay();    // Ждем вторую секунду   
 goto rep;


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

ну и while(1) компилер нормально как jmp делает в одну комманду, так тчо goto ненужно, оно было нужно в задержке, там супротив циклов do while дает -2байта


Добавлено: Thu Mar 16, 2017 10:29 pm
Ответить с цитатой

Behram
 


А че я свой код не могу вставить? Просто кусок исчезает.

Добавлено: Thu Mar 16, 2017 10:45 pm
Ответить с цитатой

SilverRay
 


Николай писал(а):
2SilverRain
Не думал, что мой ник так тяжело правильно написать.

Что до кода -- он нехорош в том плане, что идет запись не конкретно заданного бита, а всего сразу.

Добавлено: Thu Mar 16, 2017 10:49 pm
Ответить с цитатой

Николай
 


не только
инверсия байта тоже в три комманды компилится.


2behram
а хрен его знает есличессно

Добавлено: Thu Mar 16, 2017 11:07 pm
Ответить с цитатой

TAN
 


Пароль stm32pas

Код на 84:
Код:

#include <avr> 
#define decmsticks (F_CPU) / 150

int main(void)
{           
  unsigned int ti;
  unsigned char ticks;
  DDRB  = 0x01;
  while  (1)
  {
  PORTB = 0x01;
 
   for (ticks = 150; ticks; ticks--)
      {         
         for(ti=decmsticks; ti; ti--)
         {         
         if (ticks == 50) {PORTB = 0x00;}   
         }         
      } 
   
  }       
}

Настройки компилятора стоковые (оптимизация -s)


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


P.S. А чо /io.h не хочет в код вставлять?


Добавлено: Thu Mar 16, 2017 11:48 pm
Ответить с цитатой

Николай
 


DDRB = 0x01;
PORTB = 0x01;
PORTB = 0x00;

менять на
DDR|=(1<<0)
PORTB|=(1<<0)
PORTB&=~(1<<0)

которые компилируются в кошерные sbi 0x17,0 sbi 0x18,0 cbi 0x18,0

даст тебе уще минус байта 3

Добавлено: Fri Mar 17, 2017 12:05 am
Ответить с цитатой

Behram
 


Если выходу в PINB писать единицу, то он будет инвертировать свое состояние. Работает только у сравнительно новых АВРок.
TAN писал(а):
А что такого в АРМе в золоте, чтоб его фоткать?
А, я подумал что импорт смех Но все равно интересно.

Добавлено: Fri Mar 17, 2017 12:09 am
Ответить с цитатой

TAN
 


Удалено модератором.

Добавлено: Fri Mar 17, 2017 2:19 am
Ответить с цитатой

Евгений Светницкий
 


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

Добавлено: Fri Mar 17, 2017 4:35 am
Ответить с цитатой

Николай
 


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


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


Если выходу в PINB писать единицу, то он будет инвертировать свое состояние. Работает только у сравнительно новых АВРок.
это интересно, а как это, ведь запись единицы это "sbi" т.е. установить бит. команды инверсии бита вроде как нету у них

Добавлено: Fri Mar 17, 2017 9:35 am
Ответить с цитатой

Behram
 


Это железная фича походу.

Добавлено: Fri Mar 17, 2017 11:26 am
Ответить с цитатой

Николай
 


Тогда это не фича а баг, достойный занесения в еррата. Хоть десять раз выполняй sbi все равно должна быть единица, ведь это блин set bit мать его, инверсии бита среди команд не видел чоото. Надо изучить на железе данный вопрос вечерком, потому как потенциальное место для пиздеца. У меня присвоения байта целиком нигде не используетая, везде работа с битами, но насколлко помню у тини 85 два раза portb|=1<<0 (компилится в sbi 0x17,0) как и положено дает два раза установку единички. Иначе мнеб от клиентов давно пиздец настал.
Была бы инверсия яб еще пару байт сэкономил у светодиодной мигалки

Добавлено: Fri Mar 17, 2017 12:00 pm
Ответить с цитатой

Анна
 


Ну если и баг, то вроде не страшный, это же PINB. Делать туда SBI - обычно нет смысла.

Добавлено: Fri Mar 17, 2017 12:08 pm
Ответить с цитатой

Behram
 


Да не баг это, а фича

Добавлено: Fri Mar 17, 2017 12:25 pm
.JPG (31.75 Кб)

Ответить с цитатой

Николай
 


Аааа. Pinb !????? А я то думал что portb. Тада прикольно. Можно юзать данную штуку. Надо внимательней читать Smile

Добавлено: Fri Mar 17, 2017 12:27 pm
Ответить с цитатой

Анна
 


Спасиба Smile Не знала.
Значит, невнимательно читала даташиты Smile Столько лет использую эти авки, а это как-то прошло мимо мозга. Или это появилось только в новых даташитах?

Добавлено: Fri Mar 17, 2017 12:28 pm
Ответить с цитатой

SilverRay
 


Это уже серия А вроде.

Добавлено: Fri Mar 17, 2017 12:32 pm
Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
На страницу Пред.  1, 2, 3 ... 99, 100, 101 ... 150, 151, 152  След.     Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.