Цитата(Илья_ @ Aug 20 2008, 12:46)

Но главный вопрос так и остался открытым :
"Почему переменная обьявлення как volatile и которой присвоено значение ножки процессора, на меняется согласно с изменением сигнала на этой ноге процессора ??? "
Да потому, что вы никак не можете понять, что
указатель это тоже
переменная, которая содержит
адрес переменной к которой вы обращаетесь с помощью этого указателя. Так вот значение адреса
не меняется. Меняется содержимое переменной, которую вы адресуете с помощью указателя. Так что квалификатор volatile в определении указателя никак не влияет на считывание значения переменной с помощью этого указателя.
Пример.
Имеем условный 8-ми битный порт M по адресу 0x0010.
Его определение в хидерах скорее всего такое
portsdef.h
Код
#ifndef PORTSDEF_H
#define PORTSDEF_H
__no_init volatile unsigned char PORT_M @ 0x0010;
#endif
main.c
Код
#include "portsdef.h"
#define BIT0 0x01
unsigned char *pPortM;
void main(void)
{ pPortM=(unsigned char *)&PORT_M;
...
if ((*pPortM&BIT0)==0) //Проверяем состояние первого бита порта M
{
...
}
...
}
Вне зависимости от того, как мы объявили указатель
Код
unsigned char *pPortM;
или
Код
volatile unsigned char *pPortM;
У нас
содержимое самого
указателя не меняется и всегда равно 0x0010. А меняется
содержимое порта PORT_M
по адресу 0x0010, адрес которого содержит указатель.
Так, что для считывания
реальных данных с порта нужно использовать специальную конструкцию заложенную компилятором (см. выше) и его непосредственный адрес.
Код
if ((PORT_M&BIT0)==0)
{
...
}
Либо попробовать симмитировать ее, как-то так
Код
if ((((volatile unsigned char)(*pPortM))&BIT0)==0)
{
...
}