Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 04.12.2013, 19:03   #1
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/50
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Непонятки с компилятором С18

Имеется программа для 18F2520 - часы с градусником DS18B20.
Решил поменять контроллер на 18F46K22 (SOIC).
В коде есть процедура чтения температуры
Описание переменных:
Код:
unsigned char    wrkReadTemprState;
unsigned char     wrkLTmpr;
unsigned char     wrkHTmpr;
unsigned int     wrkTmpr;
unsigned char     Tmpr[9];
unsigned char     hi_tempr = 0;
unsigned char     low_tempr = 0;
Сама процедура:
Код:
void Read_Tempr(void){
    unsigned char tmp;
    unsigned char intTmp;
//    fReadTempr = 0;
    // читаем результат
    if (wrkReadTemprState == 0)    _1w_init(); else
      if (wrkReadTemprState == 1)    _1w_out_byte(0xcc); else// skip ROM
      if (wrkReadTemprState == 2)    _1w_out_byte(0xbe); else // read
      if (wrkReadTemprState == 3)    Tmpr[0] = _1w_in_byte(); else
      if (wrkReadTemprState == 4)    Tmpr[1] = _1w_in_byte(); else
    if (wrkReadTemprState == 5)    Tmpr[2] = _1w_in_byte(); else
    if (wrkReadTemprState == 6)    Tmpr[3] = _1w_in_byte(); else
    if (wrkReadTemprState == 7)    Tmpr[4] = _1w_in_byte(); else
    if (wrkReadTemprState == 8)    Tmpr[5] = _1w_in_byte(); else
    if (wrkReadTemprState == 9)    Tmpr[6] = _1w_in_byte(); else
    if (wrkReadTemprState == 10) Tmpr[7] = _1w_in_byte(); else
    if (wrkReadTemprState == 11) Tmpr[8] = _1w_in_byte(); else

      // начинаем новое измерение
      if (wrkReadTemprState == 12) _1w_init(); else
      if (wrkReadTemprState == 13)  _1w_out_byte(0xcc); else  // skip ROM

      if (wrkReadTemprState == 14){
        _1w_out_byte(0x44);  // perform temperature conversion
        _1w_strong_pull_up();
      } else

    if (wrkReadTemprState == 15){
//        wrkTmpr = Tmpr[0] | (Tmpr[1]<<8);
        wrkTmpr = (unsigned int)Tmpr[1] << 8;
        wrkTmpr |= Tmpr[0];// | intTmp;         
        tmp = calc_crc(Tmpr);
        if(tmp != 0)    wrkReadTemprState = 250;
    } else

      // сохраняем результат
      if (wrkReadTemprState == 16){
        if((Tmpr[1]>>7)==0x01){
            wrkTmpr = 0 - wrkTmpr;
            Flags.fTmpMinus = 1;
        }
        else{
            Flags.fTmpMinus = 0;
        }
            wrkTmpr >>= 4;
      } else
  
      if (wrkReadTemprState == 17) 
      {
        Decod_Tempr(wrkTmpr);
        if((Tmpr[8] == 0x1C) && (hi_tempr == 8) && (low_tempr == 5)){
            hi_tempr = 11;
            low_tempr = 11;
        }
        wrkReadTemprState = 250;
      }
  wrkReadTemprState++;  // распределение операций чтений датчика требуется чтобы не уменьшать быстродействие
}
/*-----------------------------------------------------------------------------------------------*/
(Где украл код не помню, но автору большое спасибо)

Код рабочий уже не на одном устройстве работает, но столкнулся с проблемой, что переменная wrkReadTemprState стопорится на каком то значении и больше не инкрементирутся.
Если в объявлении не присвоить нулю то значение не равное нулю, а если обнулить то останавливается в нуле.
После бессмысленных втыканий в рабочий код решил перенести объявление wrkReadTemprState на другую строчку.
Код:
unsigned char     wrkLTmpr;
unsigned char     wrkHTmpr;
unsigned int     wrkTmpr;
unsigned char     Tmpr[9];
unsigned char     hi_tempr = 0;
unsigned char     low_tempr = 0;
unsigned char    wrkReadTemprState;
И все заработало.
Я понимаю, что написал бред, что такого не бывает, но....
Может в написании программ нужно что то контролировать? Почему так получилось?
Компилятор MPLAB C18 (демо режим 60 дней)
AlexKid вне форума   Ответить с цитированием
Старый 04.12.2013, 19:28   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,214
Вес репутации: 4181/91
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

это одна из самых ужасных машин состояний, что я видел.
unsigned char wrkReadTemprState; - эту переменную следует объявить как static volatile unsigned char, если я все правильно понимаю.
***
вне контекста тяжело сказать почему у Вас все так.
besogon вне форума   Ответить с цитированием
Старый 04.12.2013, 19:30   #3
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,214
Вес репутации: 4181/91
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

сделайте нормально через switch.
у Вас какая-то логическая ошибка во всем этом.
besogon вне форума   Ответить с цитированием
Старый 04.12.2013, 21:08   #4
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от AlexKid Посмотреть сообщение
...что такого не бывает, но....
Может в написании программ нужно что то контролировать? Почему так получилось?
Компилятор MPLAB C18 (демо режим 60 дней)
Не ломай голову, в С18 бывает и не такое Размещай переменные длиной более байта в выравненном сегменте, лепи (не глядя) квалификатор volatile, не вызывай функции из тела и interrupt и будет те щастье. Microchip либо катастрофически не везёт с компиляторами, либо это направление у них курирует клинический теоретик.
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 04.12.2013, 21:14   #5
pfgx
Senior Member
 
Регистрация: 14.11.2007
Сообщений: 1,106
Вес репутации: 822/64
pfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to behold
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
не вызывай функции из тела и interrupt и будет те щастье.
Про interrupt понятно, а вот как из тела не вызывать? Вся программа в main() должна быть?
pfgx вне форума   Ответить с цитированием
Старый 04.12.2013, 21:51   #6
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 37
Сообщений: 4,264
Вес репутации: 2731/114
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
Не ломай голову, в С18 бывает и не такое
И что бывает? Уж как я не извращался, всегда результат был такой, как задумывался. Что я делаю не так?
__________________
read only
Machine slave вне форума   Ответить с цитированием
Старый 04.12.2013, 21:56   #7
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pfgx Посмотреть сообщение
Про interrupt понятно, а вот как из тела не вызывать? Вся программа в main() должна быть?
Из interrupt, interruptlow(PIC18) и тела не должна вызываться одна и та же функция. И не говорите мне что это стандартное или хоть как то описанное правило. Как правило наоборот, вызывать можно, но внезапно в компиляторе что-то "щёлкает" и потом концов не найдёшь и начинается шаманизм с volatile, созданием областей больших чем 256, выравниванием указателей, выделением сегментов под автопеременные...
Сдам на следующей неделе проект и забуду(надеюсь) эту хрень как кошмарный сон.
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 04.12.2013, 22:15   #8
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от Machine slave Посмотреть сообщение
И что бывает? Уж как я не извращался, всегда результат был такой, как задумывался. Что я делаю не так?
А хрен тя знает
С какого перепугу, например, мне пришлось объявлять volatile буфер, с которым все операции выполняются только в прерывании.
У меня, в итоге, тоже всё так или иначе работает(без кавычек). На нашем уровне вообще
Цитата:
не бывает проблем, бывают только задачи

Но компиляторы для Atmel, NXP, ST... во взвимодействии с платформой ведут себя намного предсказуемее.

Последний раз редактировалось pal1222@yandex.ru; 04.12.2013 в 22:20.
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 04.12.2013, 22:26   #9
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 41
Сообщений: 3,246
Вес репутации: 3684/116
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от Machine slave Посмотреть сообщение
И что бывает? Уж как я не извращался, всегда результат был такой, как задумывался. Что я делаю не так?
"Если после компиляции не выскачила ошибка - позовите системного администратора, пусть он исправит ошибку в компиляторе" (С)
IceS вне форума   Ответить с цитированием
Старый 04.12.2013, 22:56   #10
pfgx
Senior Member
 
Регистрация: 14.11.2007
Сообщений: 1,106
Вес репутации: 822/64
pfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to beholdpfgx is a splendid one to behold
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
Из interrupt, interruptlow(PIC18) и тела не должна вызываться одна и та же функция. И не говорите мне что это стандартное или хоть как то описанное правило.
Про одновременность не подумал. Но на мой взгляд правилом должна быть как раз возможность такого вызова.
pfgx вне форума   Ответить с цитированием
Старый 04.12.2013, 23:04   #11
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4407/102
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pfgx Посмотреть сообщение
Про одновременность не подумал. Но на мой взгляд правилом должна быть как раз возможность такого вызова.
Из interrupt, interruptlow(PIC18) и тела вызывать одну и ту же функцию можно, если эта функция написана правильно и при входе в обработчик прерывания сохраняются используемые этой функцией ресурсы.

P.S.

Такие функции называются реентерабельными.

Последний раз редактировалось Vlad&mir; 04.12.2013 в 23:13.
Vlad&mir вне форума   Ответить с цитированием
Старый 04.12.2013, 23:14   #12
FlashBack
Senior Member
 
Аватар для FlashBack
 
Регистрация: 16.02.2010
Адрес: Грузия, Тбилиси
Возраст: 35
Сообщений: 2,232
Вес репутации: 2337/82
FlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от Machine slave Посмотреть сообщение
И что бывает? Уж как я не извращался, всегда результат был такой, как задумывался. Что я делаю не так?
А я вот словил недавно на проце J94. Есть кусок кода, пашет. Код растёт тут бах и функция atol начинает возвращать некое фиксированное значение вместо нужного... Смотрю - на входе ок, на выходе ****... Отключаю Extended Mode - всё норм. Так и не понял что это было, но там не только с atol косяки были, некоторые функции стали путать входные параметры. Как и почему не знаю, но стеку было явно плохо.
FlashBack вне форума   Ответить с цитированием
Старый 05.12.2013, 00:25   #13
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pfgx Посмотреть сообщение
Про одновременность не подумал. Но на мой взгляд правилом должна быть как раз возможность такого вызова.
В известных мне (не много, HT и С18) компиляторах для microchip из-за принятых моделей распрелеления памяти именно это, что называется, "как повезёт". Самое смешное, что при использовании линейной модели c-stack, (IAR, GCC) невозможно случайно получить как раз нереентерабильный вызов
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 05.12.2013, 06:06   #14
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/73
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от Vlad&mir Посмотреть сообщение
Из interrupt, interruptlow(PIC18) и тела вызывать одну и ту же функцию можно, если эта функция написана правильно и при входе в обработчик прерывания сохраняются используемые этой функцией ресурсы.
Насколько я помню, в настройках компилера С18 есть галочки по организации памяти, auto и static. Если выбрано auto, то хоть рекурсию, хоть вызов одновременнно из основного цикла и обоих векторов прерываний никаких сбоев не вызовет, т.к. все локальные переменные работают через стек. Даже, если внутри будут математические функции и в прерываниях руками не запретили несохранять область MATH_DATA.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 05.12.2013, 06:13   #15
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/73
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от pal1222@yandex.ru Посмотреть сообщение
Не ломай голову, в С18 бывает и не такое Размещай переменные длиной более байта в выравненном сегменте, лепи (не глядя) квалификатор volatile, не вызывай функции из тела и interrupt и будет те щастье. Microchip либо катастрофически не везёт с компиляторами, либо это направление у них курирует клинический теоретик.
Зря так. Вполне отличный компилер, сколько я на нем всего переделал и никаких проблем. Единственный минус, считаю, настройки завуалированы по самое нехочу. use guid приходится изучать. НУ и за банками памяти лучше следить руками.
А зачем для 8-ми битников переменные длиной боле одного байта выравнивать? Первый раз такое слышу, т.к. смысал нет никакого.
Вызывать функции можно откуда угодно. Даже, рекурсии лепить. Все четко работает, но только в режиме auto. Минус такого режима, вся работа через стек, тормоза появляются. В режиме static все локальные переменные являются глобальными в ОЗУ, поэтому и вызывать одновременно нельзя.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 05.12.2013, 07:39   #16
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,214
Вес репутации: 4181/91
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Вполне отличный компилер, сколько я на нем всего переделал и никаких проблем - в нем нет атрибутов, нет inline - а то, как через прагму и asm делаются прерывания вообще лебединая песня адекватности.
besogon вне форума   Ответить с цитированием
Старый 05.12.2013, 08:22   #17
Vlad&mir
Senior Member
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 1,720
Вес репутации: 4407/102
Vlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond reputeVlad&mir has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Плохому программисту всегда компиляторы мешают...
Vlad&mir вне форума   Ответить с цитированием
Старый 05.12.2013, 08:32   #18
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,131
Вес репутации: 4577/130
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от 2AplusA Посмотреть сообщение
Зря так. Вполне отличный компилер, сколько я на нем всего переделал и никаких проблем. Единственный минус, считаю, настройки завуалированы по самое нехочу. use guid приходится изучать. НУ и за банками памяти лучше следить руками.
А зачем для 8-ми битников переменные длиной боле одного байта выравнивать? Первый раз такое слышу, т.к. смысал нет никакого.
Вызывать функции можно откуда угодно. Даже, рекурсии лепить. Все четко работает, но только в режиме auto. Минус такого режима, вся работа через стек, тормоза появляются. В режиме static все локальные переменные являются глобальными в ОЗУ, поэтому и вызывать одновременно нельзя.
таки еще overlay есть. у меня на нем стек работает, т.к. в статик памяти не хватает, а в авто стека (опять же памяти).
Ну и расширенный набор команд только в авто работает.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 05.12.2013, 13:56   #19
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/50
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Непонятки с компилятором С18

Про вызов процедуры в interrupt и в теле это понятно. еще когда использовал HI-TECH он ошибку выдавал.
"voletile" помоему пробовал. не помогло.
Где то есть хорошая статья про этого зверя.

Подбивая итоги можно сказать:
Не парься такое бывает. Но что бы такого не было нужно разбираться в тонкостях настройки компилятора.
Будем учить матчасть.

Еще один вопрос.
есть у 18f46k22 такой параметр как OSCTUNE.

у меня в программе он настраивается
Код:
OSCCON = 0b01110110;
почему именно такое значение не помню-подбирал опытным путем.
Используется внутренний генератор.
Код:
#ifndef __CONFIG_H
#define    __CONFIG_H

#pragma config    FOSC = INTIO67//HSHP//
#pragma config    PRICLKEN = ON
#pragma config    IESO = ON
#pragma config    PLLCFG = OFF
#pragma    config    WDTEN = OFF
#pragma config    HFOFST = OFF
#pragma config    CCP2MX = PORTC1
#pragma config    PBADEN = OFF
#pragma config  MCLRE = INTMCLR
#pragma config    STVREN = ON
#pragma config    BOREN =OFF
#pragma config  DEBUG = ON
#pragma config    LVP = OFF
#pragma config    CP0 = OFF
#pragma config    CP1 = OFF
#pragma config    CP2 = OFF
#pragma config    CP3 = OFF
#pragma config    CPB = OFF

#endif
Программа для стелы для АЗС.

Программа работала пару месяцев, а потом такое чувство, что сбивается тактовая частота. Или перезаписывается кусок кода.
Причем как то все странно. В программе есть рассылка показаний от мастер модуля к остальным по USART эта часть работает, а вот реагирование на ИК пульт не работает. И частота мигания параметров тоже не стабильна.
Перепрошивка помогает еще на месяц. Потом история повторяется.
Понимаю, что многие скажут:"Хрен его знает, что ты тут понаписал". Но может у кого то была такая фигня.
AlexKid вне форума   Ответить с цитированием
Старый 05.12.2013, 15:34   #20
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от AlexKid Посмотреть сообщение
... , что многие скажут: "Хрен его знает, что ты тут понаписал". Но может у кого то была такая фигня.
"Послушай дружок, я расскажу тебе сказку"
Как-то проходили мы испытания на устойчивость к электромагнитным помехам. Сертифицироваться собирались со степеню жесткости 2, соответственно предварительно испытывали со степеню жесткости 3. Так вот... примерно через 5 минут микросекундных импульсных, устройство стабильно вроде как теряло конфигурационные параметры и требовало полной перезагрузки - "вмешательство оператора" (критерий С) а нужно было, в худшем случае, "B". Вскрытие показало, что в область параметров в eeprom, таки да, попадает некая хрень. Попытка перенести параметры во flash привела и вовсе к необратимому разрушению теперь уже и прошивки. Прикинув уд к носу (предварительно записанныё в eeprom данные не разрушаются, а раньше прошивка не слетала) смекнул, что разница только в наличии или отсутствии соответствующего модуля записи. Т.к. вообще никуда не писать всё таки нельзя , оставил конфиг в eeprom и навесил на него умеренно монструозный механизм автоматического контроля достоверности и восстановления данных. Сертификацию прошли...
http://www.elemcom.ru/test_r.html Это картинки к сказочке
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 05.12.2013, 15:57   #21
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/50
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Непонятки с компилятором С18

Спасибо за познавательную сказку.
Я как раз грешил на дросселя подсветки, которые висят возле мастер модуля.

Вопрос к знатокам, как можно малой кровью менять конфигурацию камня в процессе выполнения программы?

Последний раз редактировалось AlexKid; 05.12.2013 в 16:03.
AlexKid вне форума   Ответить с цитированием
Старый 05.12.2013, 23:12   #22
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,502
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Спасибо за познавательную сказку.
Я как раз грешил на дросселя подсветки, которые висят возле мастер модуля.

Вопрос к знатокам, как можно малой кровью менять конфигурацию камня в процессе выполнения программы?
Не понял вопроса
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 06.12.2013, 12:10   #23
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/50
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Непонятки с компилятором С18

Контроллер конфигурируется в процессе прошивки. Можно ли менять конфигурацию с программы (например с процедуры init_cpu) и как?
Не могу разобраться...
AlexKid вне форума   Ответить с цитированием
Старый 06.12.2013, 12:16   #24
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/50
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Контроллер конфигурируется в процессе прошивки. Можно ли менять конфигурацию с программы (например с процедуры init_cpu) и как?
Не могу разобраться...
Разобрался. Хлопотно это. Легче электронные балласты на подсветку повесить, может поможет....
AlexKid вне форума   Ответить с цитированием
Старый 06.12.2013, 14:16   #25
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 41
Сообщений: 3,246
Вес репутации: 3684/116
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Непонятки с компилятором С18

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Контроллер конфигурируется в процессе прошивки. Можно ли менять конфигурацию с программы (например с процедуры init_cpu) и как?
Не могу разобраться...
Правильно заданный вопрос - это уже половина ответа.
Судя по вопросу вы сами не понимаете, что хотите спросить.
Вопрос звучит как "еду я в машине, можно ли менять музыку", а дальше думайте сами, диск другой поставить, радиостанцию включить или магнитолу другую установить, а может хотите в альбоме пару нот местами переставить?..
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Minimal context в С18 vladtv Продукция MICROCHIP 18 11.07.2012 14:45
Объявление переменных С18 soksok Продукция MICROCHIP 9 17.08.2010 15:46
Не понятки с компилятором С18 inki-sasha Продукция MICROCHIP 7 25.07.2010 18:31
проблема с С18 Валера Вопросы начинающих 4 14.08.2009 14:13


Часовой пояс GMT +3, время: 10:01.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot