Вынесите объявление массива за пределы main. Он у вас локальный в main, сделайте его глобальным.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Оставьте Мегу в покое, она не виновата. Начинайте колдовать над Си. Помогут: Гугл: "Видимость переменных" Гугл: "Области видимости переменных" Но это называется "Изучать по кусочкам". Учебник по Си читать не пробовали?
У этого камня пока нет главного качества - доступность. Нигде в магазинах не найти, а заказывать 10000 с завода как то дороговасто. Даже давно выпускаемые AtMega88 у нас в магазине еще не продаются. И на E-Bay еще тоже не продают вашу тину.
_________________ В поисках истины человек развивается.
Здраствуйте, уважаемые Коты! Подскажите, пожалуйста, можно ли компилятору сишки в WinAvr запретить использовать определенный регистр общего назначения и, если можно, то как это сделать? П.С. Упс, прошу прощения, промахнулся вкладкай браузера и написал не в подходящей теме Но все равно буду рад услышать ответ
Нет, регистры общего назначения компилятор определяет сам, для этого при включении кусочков на ассемблере используется специальный синтаксис. Вы можете использовать конкретный регистр только если подключаете целый модуль, написанный на чистом ассемблере.
PS А зачем запрещать компилятору использовать определенный регистр?
_________________ В поисках истины человек развивается.
Последний раз редактировалось vitalik_1984 Ср авг 15, 2012 20:17:14, всего редактировалось 1 раз.
А вот что говорит нам по этому поводу avr-lib-user-manual:
Цитата:
10.7 Locking Registers The IAR compiler allows a user to lock general registers from r15 and down by using compiler options and this keyword syntax:
Код:
__regvar __no_init volatile unsigned int filteredTimeSinceCommutation @14;
This line locks r14 for use only when explicitly referenced in your code thorugh the var name "filteredTimeSinceCommutation". This means that the compiler cannot dispose of it at its own will.
To do this in AVR GCC, do this:
Код:
register unsigned char counter asm("r3");
Typically, it should be possible to use r2 through r15 that way.
Note: Do not reserve r0 or r1 as these are used internally by the compiler for a temporary register and for a zero value. Locking registers is not recommended in AVR GCC as it removes this register from the control of the compiler, which may make code generation worse. Use at your own risk.
Добрый день!! Собрал тут на днях устройство. Одна из его функций - считывание количества оборотов двигателя с помощью датчика Холла (tle4905l). Так вот проблема в том, что он успевает считать только 1 об/сек, а нужно около 15. Не могу понять, почему так медленно считывает инфу с датчика, ведь прога написана на 30-ти строках примерно, а тактирование идёт от ВНУТРЕННЕГО резонатора на 8МГц. Подскажите пожалёста, в чём может быть дело...
Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 15, 2012 09:23:38
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19726 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Значит, в сторону схемы надо копать. Или алгоритма.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Нет, регистры нашего назначения компилятор определяет сам, для этого при включении кусочков на ассемблере используется специальный синтаксис. Вы можете использовать конкретный регистр только если подключаете целый модуль, написанный на чистом ассемблере.
Спасибо за информативный ответ. Очень помогли И челу Совесть тоже, просто мне приблуда вчера пришла в голову, что нужно сделать только так, и никак по-другому. Поэтому обойдусь более традиционными методами
Схема до безобразия проста - датчик, питание, дисплей и матрица кнопок 4х4. В тот момент, когда датчик производит считывание вращений, матрица отключается. Пока настораживают два момента: 1) Работа внутреннего резонатора не может притупить опрос портов МК? 2) При каждом обороте двигателя, на дисплей выводится информация о количестве совершённых оборотов. Я знаю, что дисплей хорошо затупляет работу МК, может пока МК отправляет данные на дисплей, происходит "пролёт" показаний датчика?
Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 15, 2012 13:09:30
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19726 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
isx писал(а):
2) При каждом обороте двигателя, на дисплей выводится информация о количестве совершённых оборотов.
это как, 15 раз в секунду что ли?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Теоретически должно было так быть, но на практике всё пролетает. Он не может с такой частотой обновлятся? Если нет, то какая предельная частота обновления (дисплей WH1602b)?
Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 15, 2012 13:31:30
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19726 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Видимо, вы использовали чью-то библиотеку для работы с дисплеем? Тогда ХЗ как там сделано. А тайминги самого дисплея есть в ДШ.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Теоретически должно было так быть, но на практике всё пролетает. Он не может с такой частотой обновлятся? Если нет, то какая предельная частота обновления (дисплей WH1602b)?
Если бы даже и мог, то это бессмысленно : такую частоту обновления человек не в состоянии воспринять глазом и осмыслить. Пять раз в секунду - и то много. Оптимально - 2 .
Осмысливать тут и не обязательно. Эта информация чисто для восприятия (показывает, что счёт таки идёт ). Чтобы уменьшать частоту, нужно будет делать ещё алгоритм. а я не хотел загромождать память, её мне много нужно будет в дальнейшем. Библиотека стандартная CVAVR-овская...
интересная штука.... Убрал строку инициализации дисплея, и стало всё норм... Теперь сотку в секунду свободно считает...
Дисплей инициализируется одной строкой?! Интересно. Или эта строка - вызов функции инициализации? Тогда второй вопрос - дисплей вообще не инициализируется? Ну и на всякий случай - не надо синхронизировать два совершенно независимых асинхронных процесса - вращение чего-то там и обновление дисплея. Они по природе своей абсолютно асинхронны. Вот и поступайте с ними, как с двумя отдельными процессами.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения