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

 
 
> IAR STM8 ошибка линковщика [Li005]
den1s
сообщение Oct 19 2012, 09:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



Здравствуй!!! На работе руководством было принято стратегическое решение о переходе на процы STM8 взамен Атмела. Я в свою очередь решил юзать стандартную STMовскую библиотеку. Но в первом же проекте наткнулся на ошибку, которая по-ходу выше моих программерских познаний (см. ниже). Поиск по форуму и гуглу не помогли.
Смысл в следующем: при попытке прикрутить поверх стандартной либы свою библиотеку UART с использованием очереди (или циклического буфера) наткнулся на ошибку линковщика [Li005]. А именно в момент прописывания обработчика прервыния по завершению передачи UART в файле "stm8s_it.c".
Вот выдержки из всех файлов, которые на мой взгляд нужны для помощи мне))):
Файл main.c
Код
#include "main.h"
#include "stm8s.h"
#include "stdio.h"
#include "uart.h"

void main(void)
{
  UART_init();
  UART_SendStr("test");
  while(1);
}

Файл uart.h
Код
#include "stm8s.h"

#define UART_SPEED             115200
#define UART_GPIO_PINS      (GPIO_PIN_6 | GPIO_PIN_5)
#define SIZE_BUF                  256

void UART_init(void);
__monitor void UART_PutChar(uint8_t sym);
void UART_SendStr(uint8_t * data);

Файл uart.c
Код
#include "uart.h"

static volatile uint8_t uartTxBuf[SIZE_BUF];
static uint16_t txBufHead = 0;
static volatile uint16_t txCount = 0;

void UART_init(void)
{
  UART2_DeInit();
  UART2_Init((uint32_t)UART_SPEED, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO,
              UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
  UART2_ITConfig(UART2_IT_TC, ENABLE);
  UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
  enableInterrupts();
}

__monitor void UART_PutChar(uint8_t sym)
{
  if((UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET) && (txCount == 0))
    UART2_SendData8(sym);
  else
  {
    if (txCount < SIZE_BUF)
    {
      uartTxBuf[txBufTail] = sym;
      txCount++;
      txBufTail++;
      txBufTail = txBufTail % SIZE_BUF;
    }
  }
}

void UART_SendStr(uint8_t * data)
{
  uint8_t sym;
  while(*data)
  {
    sym = *data++;
    UART_PutChar(sym);
  }
}

Файл stm8s_it.c
Код
#include "stm8s_it.h"
#include "uart.h"

extern uint8_t uartTxBuf[SIZE_BUF];
extern uint16_t txBufHead;
extern uint16_t txCount;

INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)
{
   if (txCount > 0)
   {
     UART2_SendData8(uartTxBuf[txBufHead]);
     txCount--;
     txBufHead++;
     if (txBufHead == SIZE_BUF)
       txBufHead = 0;
   }
}

При компиляции IAR выдает следующее:
Код
Error[Li005]: no definition for "txCount" [referenced from F:\SOURSE\SST135\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Template\EWSTM8\STM8S105\Obj\stm8s_it.o]
Error[Li005]: no definition for "txBufHead" [referenced from F:\SOURSE\SST135\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Template\EWSTM8\STM8S105\Obj\stm8s_it.o]
Error[Li005]: no definition for "uartTxBuf" [referenced from F:\SOURSE\SST135\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Template\EWSTM8\STM8S105\Obj\stm8s_it.o]
Errors: 3
Warnings: none

Link time:   0.08 (CPU)   0.10 (elapsed)
Error while running Linker

Total number of errors: 3
Total number of warnings: 0

В общем не нравятся ему переменные в файле stm8s_it.c которые объявлены в файле uart.c хотя я и объявил их как extern.
Что бы не было вопросов "включен ли файл в проект":

IAR 6.1.6.1880 (6.1.6.1880), проц STM8S105
Заранее благодарен.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 17:56
Рейтинг@Mail.ru


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