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

 
 
> АТмега 128 с внешней памятью и светодиоды на порту F, странное поведение
GDI
сообщение Nov 8 2006, 11:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



странную картину наблюдаю сейчас... атмега128 в режиме с внешней памятью PA0-PA7 - адрес/данные , на порте F есть светодиоды PF0-PF2 (3 штуки) при мигании лобым светодиодом почему то дергается аналогичный бит на порте А, т.е. вывожу "1" на PF0 - выводится "1" и на PA0 , "0" - соответственно тоже выводится, что за фигня? никто не сталкивался? Для чистоты эксперимента оторвал ноги от платы - таже фигня. Проверял на нескольких платах - одно и то же - т.е. это не выход из строя одной меги.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vooon
сообщение Nov 13 2006, 16:48
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата
Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?


Попробую smile.gif

в программе определена символическая константа:
#define LED_ACT_NORMAL_DELAY 10

препроцессор везде где встретит LED_ACT_NORMAL_DELAY заменит на 10
т.е. мы получим код:
static byte led_act_delay = 10;

Переменные типа static инициализируются только один раз (только при первом вызове функции)
т.е. мы определяем led_act_delay имеющую тип byte (typedef unsigned char byte;) которой присваивается 10.

Цитата
Вообще непонятно, зачем объявлять static в подпрограмме, переменная static является такой же глобальной переменной, как и extern, только в пределах файла, где она объявлена, и для удобства пользования должна быть объявлена на внешнем уровне. Объявление переменной может, конечно, включать инициализацию.


С этим не соглашусь, static является локальной => виден только
в этой функции, а не в пределах файла.

Два простых примера:
Код
/* Демонстрация автоматических и статических локальных переменных */
#include <stdio.h>

void func1 (void)
{
    static int x = 20;
    int y = 20;

    printf ( "x = %i, y = %i\r\n", x--, y-- );
}

void main (void)
{
    int count;

    for ( count = 0; count < 20; count++ )
    {
        printf ( "Iteration %i: ", count );
        func1 ();
    }
}

Код
/* Демонстрация автоматических и статических локальных переменных
** попробуем узнать x из основной программы
*/
#include <stdio.h>

void func1 (void)
{
    static int x = 20;
    int y = 20;

    printf ( "x = %i, y = %i\t", x--, y-- );
}

void main (void)
{
    int count;

    for ( count = 0; count < 20; count++ )
    {
        printf ( "Iteration %i: ", count );
        func1 ();
        printf ( "x = %i\r\n", x );
    }
}


PS: пытался обьяснить точно (чтобы небыло недоразумений smile.gif )
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 13 2006, 17:36
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(vooon @ Nov 13 2006, 16:48) *
Цитата
Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?

Попробую smile.gif
PS: пытался обьяснить точно (чтобы небыло недоразумений smile.gif )

Как я понял, объявляя статическую переменную внутри функции, мы как бы сохраняем ее текущее значение вне этой функции, но использовать ее вне функции не можем. Тогда понятно, как вышеупомянутый фрагмент работает, но так неудобно для понимания...Присваивание делается один раз, скорее всего, при инициализации, а видится как будто, переменная присваивается каждый раз при вызове функции. Я ж и говорю, птичий язык(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- GDI   АТмега 128 с внешней памятью и светодиоды на порту F   Nov 8 2006, 11:54
- - otrog   Может быть включен режим совместимости с M103?   Nov 8 2006, 12:07
- - GDI   режим совместимости не включен. написал новую прог...   Nov 8 2006, 12:26
|- - Petka   Цитата(GDI @ Nov 8 2006, 15:26) режим сов...   Nov 8 2006, 12:30
|- - klop   Цитата(GDI @ Nov 8 2006, 15:26) режим сов...   Nov 8 2006, 12:36
- - GDI   чтобы предотвратить вопросы по фьюзам: стоят биты ...   Nov 8 2006, 12:44
|- - Petka   Цитата(GDI @ Nov 8 2006, 15:44) чтобы пре...   Nov 8 2006, 12:46
|- - klop   Цитата(GDI @ Nov 8 2006, 15:44) листинг с...   Nov 8 2006, 12:59
- - GDI   = 0 - означает установленный фьюз бит   Nov 8 2006, 12:52
- - otrog   Что бы исключить догадки, приведите все фьюзы и ли...   Nov 8 2006, 13:03
- - GDI   причем проявляется этот эффект только при попытке ...   Nov 8 2006, 13:05
- - GDI   Похоже этот эффект не влияет на работу шины внешне...   Nov 8 2006, 15:56
|- - SasaVitebsk   Цитата(GDI @ Nov 8 2006, 18:56) Похоже эт...   Nov 8 2006, 20:30
|- - =GM=   Цитата(GDI @ Nov 8 2006, 15:56) Похоже эт...   Nov 10 2006, 10:18
- - VDG   Цитата(GDI @ Nov 8 2006, 15:54) странную ...   Nov 8 2006, 21:10
- - GDI   To SasaVitebsk Подпорки ставить не могу - платы уж...   Nov 9 2006, 07:30
- - GDI   Наконец то найдена ошибка (или не ошибка)... если ...   Nov 9 2006, 08:17
|- - ARIM   Цитата(GDI @ Nov 9 2006, 11:17) Cпасибо K...   Nov 9 2006, 08:58
|- - KRS   Цитата(GDI @ Nov 9 2006, 11:17) Наконец т...   Nov 9 2006, 09:59
- - vooon   ЦитатаНо эта переменная никогда не будет равна 0, ...   Nov 10 2006, 22:15
|- - =GM=   Цитата(vooon @ Nov 10 2006, 22:15) Цитата...   Nov 13 2006, 15:14
- - GDI   Цитата(GDI @ Nov 9 2006, 11:17) Cпасибо Kurtу. ...   Nov 14 2006, 08:29


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

 


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


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