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

 
 
> Виснет программа с дерганьем ногой, ...если нога выбирается switch-ем
Colobox
сообщение Mar 23 2010, 08:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 31-10-07
Пользователь №: 31 901



Доброго всем времени суток!

LPC2138, IAR 4.5
Имеется вот такой код обмена по SPI:
Код
#define CS0_ON          IO0CLR_bit.P0_7= 1//
#define CS0_OFF         IO0SET_bit.P0_7= 1//
#define CS1_ON          IO0SET_bit.P0_10= 1//
#define CS1_OFF         IO0CLR_bit.P0_10= 1//
#define CS_OFF           CS0_OFF; CS1_OFF

//-----------------------------------------------------
bool TSpiTransfer::Pop( void )
{
if ( !Ready() )  return false;
//====
Start();
//====================================
TTransaction* t= &Transaction[current];
//=================
byte a= t->Address();
Select(a);
//=================
Buffer[0]= t->Cmd();//
t->Load( Buffer );
//====
byte l= t->Length();
for ( byte i = 0; i < l; ++i )
{
Spi0ReadWrite( Buffer[i] );
};
//====
l= t->ResponseLength();
for ( int i = 0; i < l; ++i )
{
  Buffer[i]= Spi0ReadWrite();
};

//=================
CS_OFF;//
//=================
t->Apply();//
run= false;
//=======================================
Discount();
//====================================
return true;
}
//------------------------------------------------------
void TSpiTransfer::Select ( byte Address )
{
//=====================
switch ( Address )
  {
   case 0 : CS0_ON;
        break;
   case 1 : CS1_ON;
        break;
  //====
   default : CS0_ON;
   };//end of switch ( Address )
//======================
}
//------------------------------------------------------

После запуска мк виснет насмерть. Пошагово смотрел- выполняются несколько
команд в начале main(), затем прерывание по системному таймеру- обработка прерывания и...
переход на начало программы, затем прерывание и т.д. по кругу.
Если Select() убрать, то все нормально. Если вместо Select() просто поставить CS0_ON (без выбора), например,
то все нормально также.
Чем ИАРу switch с ногодерганьем не нравица???!!! :-(
Причем, замена switch на if (...) else if (...) приводит к такому же зависону.
Go to the top of the page
 
+Quote Post



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

 


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


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