LINUX.ORG.RU

[СПВ][C51] Не собирается проект

 


0

1

Сижу, пытаюсь собрать проект под котнроллер фирмы Silicon Labs С8051F320, но пишет ошибки. Поскольку надо написать программу быстро, за основу взял пример, приведенный на радиокоте, собственно вот сам код:

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include "c8051f320.h"        
#include "USB_API.h"


xdata BYTE In_Packet[3]; 


/*** [BEGIN] USB Descriptor Information [BEGIN] ***/
code const UINT USB_VID = 0x10C4;
code const UINT USB_PID = 0xEA61;
code const BYTE USB_MfrStr[] = {0x1A,0x03,'S',0,'i',0,'l',0,'i',0,'c',0,'o',0,'n',0,' ',0,'L',0,'a',0,'b',0,'s',0};                      // Manufacturer String
code const BYTE USB_ProductStr[] = {0x10,0x03,'U',0,'S',0,'B',0,' ',0,'A',0,'P',0,'I',0}; //  Product Desc. String
code const BYTE USB_SerialStr[] = {0x0A,0x03,'4',0,'3',0,'2',0,'1',0};
code const BYTE USB_MaxPower = 150;           // Max current = 300 mA (15 * 2)
code const BYTE USB_PwAttributes = 0x80;      // Bus-powered, remote wakeup not supported
code const UINT USB_bcdDevice = 0x0100;       // Device release number 1.00
/*** [ END ] USB Descriptor Information [ END ] ***/


void Port_Init(void)
{
   /* Initialize Crossbar and GPIO */
    P0MDOUT   = 0xFF;
    P1MDOUT   = 0xFF;
    P2MDOUT   = 0xFF;
    P3MDOUT   = 0x01;
    XBR1      = 0x40;      
}


void Initialize(void)
{
   Port_Init();                           // Initialize crossbar and GPIO   
}


//-----------------------------------------------------------------------------
// Main Routine
//-----------------------------------------------------------------------------
void main(void) 
{
   PCA0MD &= ~0x40;                       // Disable Watchdog timer

   USB_Clock_Start();                     // Init USB clock *before* calling USB_Init
   USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,USB_PwAttributes,USB_bcdDevice);
   Initialize();
   USB_Int_Enable();
         
   while (1); 
}


//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------
void USB_API_TEST_ISR(void) interrupt 16       // ISR for USB_API
{
  bit temp_Chanel;
  BYTE INTVAL = Get_Interrupt_Source();

  if (INTVAL & TX_COMPLETE)
  {
      USB_TX_READY = 1;
  }

  if (INTVAL & RX_COMPLETE)
  {
       Block_Read(In_Packet, 3);
       P0 = In_Packet[0];
       P1 = In_Packet[1];
       P2 = In_Packet[2];    
  }
    
  if (INTVAL & DEVICE_OPEN)
  {
    USB_START = 1;
  } 
Все нужные либы (USB_Api.lib) и хидеры к проекту подключил, но при сборке сыплет такими ошибками:
MAIN.C(68): error C202: 'USB_TX_READY': undefined identifier
MAIN.C(81): error C202: 'USB_START': undefined identifier 
Вопрос, как с этим быть? В хидере данных констант не нашел...

★★★★★

Ответ на: комментарий от Zhbert

> Они же должны быть привязаны к чему-то.
Почему ты так в этом уверен?
В твоем куске кода они нигде не используются.

rival ★★
()
Ответ на: комментарий от rival

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

  if (INTVAL & TX_COMPLETE)
  {
      USB_TX_READY = 1;
  }

Если что-то там получено, быть готовым. Как-то так. Мб тогда вообще убрать это все из кода и оставить

if (INTVAL & RX_COMPLETE)
  {
       Block_Read(In_Packet, 3);
       P0 = In_Packet[0];
       P1 = In_Packet[1];
       P2 = In_Packet[2];    
  }

Хотя тогда мб работать не будет, ибо во втором куске

 if (INTVAL & DEVICE_OPEN)
  {
    USB_START = 1;
  } 

Говорится, что если устройство открыто, то пускать юсб...

Zhbert ★★★★★
() автор топика

Ни разу не копенгагаен (в с51), но думаю что вы все таки не все подключили.
Еще как вариант, на «котэ» пример приведен под один компилер, а вы собираете под другим (макросы могут называться иначе).
Была аналогичная фигня с переносом исходников с avr studio на avr_gcc.

yax123 ★★★★★
()

Это просто глобальные переменные, по которым где-то в главном цикле что-то происходит (можно передавать следующий кусок данных и запущена программа на хосте).
Читай an169.pdf, там все просто.

anonymous
()

Да, действительно не объявлены, это просто флаги показывающие что USB запущен(флаг USB_START) и что передача с хоста окончена(флаг USB_TX_READY). Если нужны обьявите их так: bit USB_TX_READY, USB_START ; Если нет, то просто не используйте.

rival ★★
()
Ответ на: комментарий от yax123

>Еще как вариант, на «котэ» пример приведен под один компилер, а вы собираете под другим (макросы могут называться иначе).

Да вроде бы делал все так, как там, и компилер тот же, и код, и либы подключил...

Zhbert ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Читай an169.pdf, там все просто.

Спасибо, посмотрю.

Zhbert ★★★★★
() автор топика
Ответ на: комментарий от rival

>Да, действительно не объявлены, это просто флаги показывающие что USB запущен(флаг USB_START) и что передача с хоста окончена(флаг USB_TX_READY). Если нужны обьявите их так: bit USB_TX_READY, USB_START ; Если нет, то просто не используйте.

Спасибо! В понедельник на работе попробую.

Zhbert ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.