18.04.2008, 18:45
|
#411
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Почему при указании глобальной переменой масива
Код:
|
//масив таймеров
int taimer[2]; |
в main требует при компилировании компилятор на него указатель? может я не правильно что понял?
-- Прилагается рисунок: --
Прикрепленный файл: 2612710.rar
|
|
|
|
18.04.2008, 21:22
|
#412
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сергей, в описании массива - 0 значение считается.
Массив [3]
|
|
|
|
19.04.2008, 04:15
|
#413
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от urry
|
Сергей, в описании массива - 0 значение считается.
Массив [3]
|
Я знаю что массив начинается со значения taimer[0],потому и беру размерность массива равным трем=0,1,2.Попробую сделать на него глобальный указатель и через него уже работать.
urry у тебя еще тот почтовый ящик работает?
Появился вопрос какой размерностью выбирать указатель на массив,int наверно нельзя так как у pic16f876 память програмная равна 8кбайт=до 1F40 максимальный адрес,значит нужна размерность указателя long=16 бит,но я ставлю под указатель int,компилятор не выдает ошибки.
|
|
|
|
19.04.2008, 11:09
|
#414
|
Временная регистрация
Регистрация: 11.12.2007
Сообщений: 79
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Где здесь 3 ???
//масив таймеров
int taimer[2];
Код:
|
я ставлю под указатель int,компилятор не выдает ошибки. |
А с чего он будет ошибку выдавать ? Он разместил массив слов в оперативной, как заказывали...Где указано, что массив должен быть в памяти программ ?
|
|
|
|
19.04.2008, 11:26
|
#415
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от urry1
|
Где здесь 3 ???
//масив таймеров
int taimer[2];
Код:
|
я ставлю под указатель int,компилятор не выдает ошибки. |
А с чего он будет ошибку выдавать ? Он разместил массив слов в оперативной, как заказывали...Где указано, что массив должен быть в памяти программ ?
|
Три значения массива taimer:1-taimer[0],2-taimer[1],3-taimer[2]
Бес попутал,с чего это я взял что находится в програмной памяти
Он же в оперативке будет.
Да и ради интереса 8 кбайт это 8192 слов,так как 1кбайт=1024 бита
|
|
|
|
20.04.2008, 12:05
|
#416
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от urry
|
Сергей, в описании массива - 0 значение считается.
Массив [3]
|
Каюсь ты прав был,проверино протеусом
|
|
|
|
21.04.2008, 16:16
|
#417
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Чо за глюк? применяю pic16f876a и ds1621,прописываю:
Код:
|
#define DAL_SCL PIN_C3
#define DAL_SDA PIN_C4
#use i2c(master,sda=DAL_SDA,scl=DAL_SCL,MASTER,FORCE_HW ,SLOW) |
Нет инициализации шины i2c,прописываеш в ручную установки модуля MSSP на ассамблере начинает работать.
Версия 4.057 CCS
Может кто у себя попробует откомпилировать?
Прикрепленный файл: 2974563.rar
|
|
|
|
23.04.2008, 21:21
|
#418
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Код:
|
#include ‹16F628A.h›
#include ‹defs.h›
struct TM
{
byte hour;
byte min;
byte sec;
};
struct TM *clk;
void main(){
while(1)
{
}
}
//------------------------------------------
// inerrupt
//------------------------------------------
#int_TIMER2
void TIMER2_isr( )
{
if(++Serv==25)
{ Serv=0;
if(++Tic==4)
{
Tic=0;
if((++clk-›sec)==60)
{
clk-›sec=0;
if((++clk-›min)==60)
{
clk-›min=0;
if((++clk-›hour)==24)
{
clk-›hour=0;
}
}
}
}
}
} |
Все вроде правильно( или я уже отупел) но поинтер
указывает на 0 , естественно все глючит и виснет...
-- Прилагается рисунок: --
|
|
|
|
23.04.2008, 22:23
|
#419
|
Временная регистрация
Регистрация: 11.12.2007
Сообщений: 79
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Да, странноватенько через указатели работает, я откомпилил твой код под Хайтеком - все в том же духе, сразу в минутах что-то нарисовалось.. Мож, смириться ???
Код:
|
typedef struct
{
unsigned hour:8;
unsigned min:8;
unsigned sec:8;
}TM;
TM clk;
void interrupt TIMER1_isr(void)
{
if(++Serv==25)
{ Serv=0;
if(++Tic==4)
{
Tic=0;
if((++clk.sec)==60)
{
clk.sec=0;
if((++clk.min)==60)
{
clk.min=0;
if((++clk.hour)==24)
{
clk.hour=0;
}
}
}
}
}
TMR1IF=0;
}
//------------------------------------------------- |
|
|
|
|
23.04.2008, 22:37
|
#420
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Все тупость прощла (решил)
Код:
|
#include ‹16F628A.h›
#include ‹defs.h›
typedef struct
{
byte hour;
byte min;
byte sec;
}time;
time clock;
time *clk;
// interrupt
#int_TIMER2
void TIMER2_isr( )
{
clk=&
if(++Serv==25)
{ Serv=0;
if(++Tic==4)
{
Tic=0;
if((++clk-›sec)==60)
{
clk-›sec=0;
if((++clk-›min)==60)
{
clk-›min=0;
if((++clk-›hour)==24)
{
clk-›hour=0;
}
}
}
}
}
}
void main(){
while(1)
{
}
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:15.
|
|