реклама на сайте
подробности

 
 
> 1 секунда на С
ZLOI
сообщение Apr 29 2008, 07:45
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Здравствуйте, интересно бы увидеть фрагмент кода на С, который бы позволял на 16 пике с 4 МГц кварцем каждую секунду увеличивать значение какой-нибудь переменной на 1. Интересно, вдруг я делаю неправильно.

Сообщение отредактировал ZLOI - Apr 29 2008, 07:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Ivan_33
сообщение May 1 2008, 08:36
Сообщение #2


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



эээ... while(1) {
delay_ms(1000);
a++;}


--------------------
Go to the top of the page
 
+Quote Post
ZLOI
сообщение May 1 2008, 15:22
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(_Ivan_33 @ May 1 2008, 17:36) *
эээ... while(1) {
delay_ms(1000);
a++;}

Вообще оригинальный ответ biggrin.gif
Я даже не думал, что Вы так словчите.
Но мне он не кажется корректным.
Если delay_ms это задержка на одну милисекунду, то это тоже неправильный код, поскольку ещё будет добавляться время от a++. А оно должны быть пару мкс. А пара микросекунд за год это уже полминуты набежало.
Хотелось бы узнать как delay_ms определяет какой у Вас кварц стоит.

Конечно я говорил о другом. Вся эта тема с таймером не должна занимать основное время МК, там ещё надо будет на ЖК выводить и другие операции. И правильное решение через прерывание.

P.S.
Ну и мотивация для создания темы была желание проверить, нужно ли знать ассемблер, чтобы решить такую задачу.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 2 2008, 23:18
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(ZLOI @ May 2 2008, 00:22) *
Вообще оригинальный ответ biggrin.gif
Я даже не думал, что Вы так словчите.
Но мне он не кажется корректным.
Если delay_ms это задержка на одну милисекунду, то это тоже неправильный код, поскольку ещё будет добавляться время от a++.

И не только от a++, надо полагать, что у Вас, кроме инкремента переменной и другая полезная работа выполняется, на которую тоже время нужно...
Цитата(ZLOI @ May 2 2008, 00:22) *
Хотелось бы узнать как delay_ms определяет какой у Вас кварц стоит.

Возможно это пример под GCC компилятор. Величина системной частоты передается через параметр в makefile.
Цитата(ZLOI @ May 2 2008, 00:22) *
Конечно я говорил о другом. Вся эта тема с таймером не должна занимать основное время МК, там ещё надо будет на ЖК выводить и другие операции. И правильное решение через прерывание.

Чтоже мешает реализовать все это через прерывания?
Если с учетом делителей таймера не подходит кварц, то можно выбрать другой. Либо настроить режим работы таймера по совпадению, если такой имеется в PIC'e. И инкрементировать переменную уже в прерывании.
Цитата(ZLOI @ May 2 2008, 00:22) *
Ну и мотивация для создания темы была желание проверить, нужно ли знать ассемблер, чтобы решить такую задачу.

Не нужно.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
ZLOI
сообщение May 3 2008, 05:12
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(haker_fox @ May 3 2008, 08:18) *
Чтоже мешает реализовать все это через прерывания?

Ничего я же давно это реализовал.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 17:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016