ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1060405
Связанные сообщения
Кто нибудь пользовал китайский 51 SINOWLTH. Где инфу по компилятору и отладке и примерам на английском посмотреть?2022-12-08
"Прогресс" в области доступной ЭКБ. Из рекламы "справа". Видны остатки по старым ценам и новая партия. Аж по 73р чип 8051, котор...2022-07-02
С контроллерами Megawin на ядре 8051 кто-нибудь работает? Как их прошиваете при производстве? У них на сайте нашел только оконны...2022-04-21
MCS51 производства STC: они действительно существуют )))2021-06-01
POV_ (13.12.2020 13:36, просмотров: 7662)
Не вполне понял что там с С99 (?) и keil51... 

Кто-то мне портил локальную переменную, что нарушало связь. Так собсно проблема и была выявлена.

Дальнейшие экскременты показали, что проблема появлялась из-за вызова колбеков из прерывания АЦП.


void CurrentMessure() interrupt ADC0_END_INT
{
 AD0INT = false;

 if (ch_pass == 0)
 {
  ADC0CF = 0xf8 | ch[channel].k;
  AMX0SL = ch[channel].sl;

  ch_pass++;
  goto exit;
 }

 if (ch_pass >= 5) 
 {
  ch_pass = 0;

  if (ch[channel].cb)
   ch[channel].cb(ADC0);

  channel++;
  if (channel >= nums)
   channel = 0;
 }
 else
  ch_pass++;

exit:
 AD0BUSY = true;
}

Вот колбеки (два, как видим, пустые):

void ext_t_cb(WORD w)
{
}

void onchip_t_cb(WORD w)
{
 onchip_t = (w * (Vref/4095.0) - 0.776) / 0.00286;
}

void ind_cb(WORD w)
{
}

И вот причина ерунды была именно в пустых функциях. Поставил там w++ и всё норм.

А это "норм"? Что там наоптимизировалось такое? Указатель на функцию есть, функция есть (прошивка не падает, просто озульник местами портит).