роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


 Страниц (2): [1] 2 »   

> Описание: зависимость выполнения кода от тактовой частоты
soob
Отправлено: 31 Марта, 2015 - 11:55:19
Post Id



Полковник


Сообщений всего: 76
Дата рег-ции: Янв. 2012  





Всем привет.

ивиняюсь, если тема создана не в той ветке

Вопрос в голове уже давно. Поиск ответа в сети дал некую ясность, но не во всем (может просто не понимаю что искать).
Объясните пожалуйста, что зависит от частоты работы МК непосредственно при выполнении кода?
Допустим, наш МК работает на частоте 1МГц.
к примеру простой код:
CODE:

...
void main(void)
{
wile(1)
{
PORTB |= 1<<0;
PORTB &= ~(1<<0);
}
}
...

получается, что в течении 1 секунды на ножку PB0 500 000 раз подается лог 1. Если так, то значит на установку лог 1 или 0 на одну ножку требуется "1 тик" МК.

а если:
CODE:

...
void main(void)
{
wile(1)
{
PORTB=0b11111111;
PORTB=0b00000000;
}
}
...

то тут строка PORTB=0b11111111; выполняется за "1 тик" или на каждую ножку отдельно т.е. "8 тиков"?
 
 Top
Predator Супермодератор
Отправлено: 31 Марта, 2015 - 15:13:23
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





в обоих случаях по одному тику.
PORTB|= 1<<0 при нормальных условиях выльется в
buf=PORTB
PORTB=buf|1
у всех (насколько мне известно) контроллеров это дело аппаратно реализовано так, что работает за 1 тик

но тем не менее есть нюанс
PORTB= чтобытонибыло
выливается в несколько команд, а еще в несколько тактов проходит возврат к началу цикла.
это можно посмотреть, если дизассемблировать *.hex
 
 Top
soob
Отправлено: 03 Апреля, 2015 - 10:38:27
Post Id



Полковник


Сообщений всего: 76
Дата рег-ции: Янв. 2012  





Получается, если взять бесконечный цикл и вложить увеличивающуюся переменную т.е.:
CODE:

...
while(1) { i++; }
...

то значение этой переменной набранной за 1 секунду будет меньше чем 1 000 000
в зависимости от того сколько тиков используется для возврата к началу?
Допустим возврат требует 1 тик, тогда i будет набирать всего 500 000! Я правильно понимаю?
 
 Top
Predator Супермодератор
Отправлено: 03 Апреля, 2015 - 14:06:00
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





думаю будет еще меньше, тысяч 200 - будет процесс

выгребание i из памяти - инкремент - складывание i в память-возврат - проверка условия
на ассемблере это можно немного сократить, пользуя регистры.
 
 Top
cjA
Отправлено: 03 Апреля, 2015 - 14:30:48
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





Predatorзапись в постоянную памятьт, и чтение из нне, зачем она ваше нужна, эй Predator
(Добавление)
Predatorна таких уровнях, Вы меня доожны, того. мяфа, Вы, Predator
(Добавление)
Predatorзапись в постоянную памятьт, и чтение из нне, зачем она ваше нужна, эй Predatorsoob
 
 Top
Predator Супермодератор
Отправлено: 03 Апреля, 2015 - 17:51:57
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





Цитата:
запись в постоянную памятьт, и чтение из нне, зачем она ваше нужна

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

(Отредактировано автором: 03 Апреля, 2015 - 17:52:36)

 
 Top
cjA
Отправлено: 07 Апреля, 2015 - 18:57:43
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





Predator, надеюсь не обратили внимание на мое состояние? Но ведь время записи будет не такты, а уже под два десятка тактов? Не умнее ли тогда в постоянную память писать, как я когда что-то не получается? (я просто учусь Подшучивать, дразнить )
 
 Top
Predator Супермодератор
Отправлено: 07 Апреля, 2015 - 19:30:20
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





тут дело не в том куда писать, а дело в том, что компилятор для подобного мероприятия задействует не регистр, а ячейку памяти и будет делать не один такт, а замутит целый процесс.
 
 Top
cjA
Отправлено: 07 Апреля, 2015 - 19:39:29
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





А об каком процессоре мы говорим? если об gcc для avr, то... естьже дерективы для Си компилятора внутри текста. Я ставлю нулевую оптимизацию- обычно потом выходит минимум кода. (другое дело что объем кода мне нужен только для скорости прошивки, ни одна из моих мег не забита больше чем на четверть. Закатывать глаза )
(Добавление)
я и грю что он в программную память пишет дольше чем в постоянную и еще дольше чем в озу. По модели этого как его Нильсона- в программную память ваще писать нельзя. И МК серии х86 тому пример. Никаких вирусов!
(Добавление)
Неймона!
 
 Top
soob
Отправлено: 09 Апреля, 2015 - 02:08:25
Post Id



Полковник


Сообщений всего: 76
Дата рег-ции: Янв. 2012  





А как на счет таймера? В сети написано, что он работает на той же частоте что и МК (если не используется предделитель). Получается он работает параллельно с нашим кодо и не зависит от него?
 
 Top
cjA
Отправлено: 09 Апреля, 2015 - 08:01:03
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





soob, в атмель таймер (в меге их три) зависит очень от осцилятора, вплодь до того что пока ты их не включишь- их как бы и нет.
(Добавление)
soob в тини кажется таймеры работают с предделителем 8, но эт тоже, отключается вроде.
 
 Top
Predator Супермодератор
Отправлено: 09 Апреля, 2015 - 10:52:45
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





soob пишет:
Получается он работает параллельно с нашим кодо и не зависит от него?

Именно так, и вообще вся перефирия (UART, SPI I2C, USB, ADC, PWM...) работает отдельно от кода, а кодом только управляется (через регистры специального назначения). Это можно сказать даже отдельные участки кристалла.
 
 Top
VCOM Супермодератор
Отправлено: 16 Мая, 2015 - 20:18:17
Post Id



Супермодератор


Сообщений всего: 658
Дата рег-ции: Март 2007  





А если почитать про Verilog или VHDL то можно и самому, между делом процессор написать! Именно написать! А можно и два сразу! А можно и не процессор! ))))
 
 Top
cjA
Отправлено: 04 Июня, 2015 - 05:03:11
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





VCOM а эти, как их ПСИЛ сы, как раз для вас. программируемые логические интегральные схемы. е ткрою меику, на их все аи Су и летают.
(Добавление)
у каждй правда свй ассемблер, н я бы пвзился, да не дадут Тащусь
 
 Top
Predator Супермодератор
Отправлено: 04 Июня, 2015 - 10:22:13
Post Id


Супермодератор


Сообщений всего: 1115
Дата рег-ции: Июль 2012  





cjA не, на ПЛИС все сушки не летают (в том смысле, что там они применяются ничуть не чаще процессоров), ассемблера у ПЛИС нет совсем, а VHDL и Verilog у всех (абсолютно) одинаковые.
вот:
http://myrobot.ru/articles/plis_begin.php
это писано когда-то давно, когда darkblue искал способ замера временных интервалов....
 
 Top
Страниц (2): [1] 2 »
« Микроконтроллеры »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown