Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


Ответ
Опции темы

IAR Embedded Workbench

Непрочитано 27.09.2014, 22:35   #361
sergeyye
Временная регистрация
 
Аватар для sergeyye
 
Регистрация: 12.03.2005
Адрес: Москва
Сообщений: 61
Сказал спасибо: 42
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergeyye на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от STM32F0 Посмотреть сообщение
...линкер требует функции с данными названиями.
Обыскался я эти функции. Спасибо.
Не понятно только, где они у него прописаны, что он их требует. И на кой чёрт именно они ему нужны?
Реклама:

Последний раз редактировалось sergeyye; 27.09.2014 в 23:14.
sergeyye вне форума   Ответить с цитированием
Непрочитано 27.09.2014, 23:07   #362
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Это чисто ИАРовский черезжоп. Они вместе с STM славно постарались над обструкцией STM8. Одни не дописали по-человечески хедер (что допиливается ручками), другие надругались в остальном.
Но не переживайте, вариантов то не особо и ИАР даже не самый худший из них.
Тут уже было по EEPROM в STM8, можно же и без атрибута __eeprom.
STM32F0 вне форума   Ответить с цитированием
Непрочитано 30.09.2014, 00:27   #363
sergeyye
Временная регистрация
 
Аватар для sergeyye
 
Регистрация: 12.03.2005
Адрес: Москва
Сообщений: 61
Сказал спасибо: 42
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergeyye на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Безуспешные попытки записать байт в ЕЕ на STM8S_Discovery продолжаются. IAR уже не ругается, но продолжает гадить из-под тишка, зараза. Процесс записи зацикливается на строке *EE_Num = Data, ради которой всё это и затевалось. Три дня на месте. Может, что не так пишу?
Выручайте, братцы!

PHP код:
 u8  __eeprom *EE_Num;         // Указатель на ячейку ЕЕ.
  #pragma location = 0x4000     // Адрес ячейки в EEPROM.
  __no_init u8 __eeprom  EE_Number;      // Имя ячейки.

void __eeprom_program_byte (u8 Data)
{
  FLASH -› DUKR = 0xAE;                                 // Запись первой половины ключа.
  FLASH -› DUKR = 0x56;                                 // Запись второй половины ключа.
  while (FLASH -› IAPSR & FLASH_IAPSR_DUL  ==0);        // Ждём разрешения на запись.
  *EE_Num = Data;                                      // Запись данных в ЕЕ.
  FLASH -› IAPSR &= 0xF7;                               // Запретить запись в EE.
} 
sergeyye вне форума   Ответить с цитированием
Непрочитано 30.09.2014, 06:08   #364
look22
Частый гость
 
Аватар для look22
 
Регистрация: 10.10.2006
Адрес: Новосибирск
Сообщений: 30
Сказал спасибо: 41
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
look22 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Тоже мучился в свое время, люди помогли.

подключить к проекту:
1. STM8S_StdPeriph_Driver\src\stm8s_flash.c

2. eeprom_facit_my.c
содержимое eeprom_facit_my.c :

Код:
//eeprom_facit_my.c
#pragma language=extended

// возвращает статус результата операции с ЕЕПРОМ
int __eeprom_wait_for_last_operation(void)
{
  FLASH_Status_TypeDef status = FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  return !!(status & (  FLASH_STATUS_SUCCESSFUL_OPERATION
                      | FLASH_STATUS_END_HIGH_VOLTAGE));
}

// запись 1 байта в ЕЕПРОМ по адресному указателю dst
void __eeprom_program_byte(unsigned char __near * dst, unsigned char v)
{
  FLASH_ProgramByte((u32)dst, (u8)v);	//запись байта v
}

// запись 4-х байтового в ЕЕПРОМ по адресному указателю dst
void __eeprom_program_long(unsigned char __near * dst, unsigned long v)
{
  FLASH_ProgramWord((u32)dst, (u32)v);	//запись 4-х байтового v
}
//
после этого работает инициализация ЕЕПРОМ и запись еепром:

Код:
__eeprom CONFIG_PKU  config;  

     FLASH_Unlock(FLASH_MEMTYPE_DATA);		    // разблокировка ЕЕПРОМ для записи
    config.status[CHAN_SO]=work_status[CHAN_SO]=ST_NORM;            //
    config.status[CHAN_SIRENA]=work_status[CHAN_SIRENA]=ST_NORM;    //
    config.status[CHAN_INVAL]=work_status[CHAN_INVAL]=ST_NORM;      //
    FLASH_Lock(FLASH_MEMTYPE_DATA);               // заблокировать ЕЕПРОМ
look22 вне форума   Ответить с цитированием
Сказали "Спасибо" look22
sergeyye (30.09.2014)
Непрочитано 30.09.2014, 06:37   #365
Bear-ku
Временная регистрация
 
Регистрация: 06.06.2007
Сообщений: 54
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Bear-ku на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Код:
while (FLASH -› IAPSR & FLASH_IAPSR_DUL  == 0);
Как минимум это условие не верно. Приоритет операции "равенства", выше чем "логическое И".
Bear-ku вне форума   Ответить с цитированием
Сказали "Спасибо" Bear-ku
sergeyye (30.09.2014)
Непрочитано 30.09.2014, 06:49   #366
Bill
Гражданин KAZUS.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от Bear-ku Посмотреть сообщение
while (FLASH -› IAPSR & FLASH_IAPSR_DUL == 0);
В таких случаях я обычно пишу так:
Код:
while (!(FLASH-›IAPSR & FLASH_IAPSR_DUL));
Bill вне форума   Ответить с цитированием
Сказали "Спасибо" Bill
sergeyye (30.09.2014)
Непрочитано 30.09.2014, 23:47   #367
sergeyye
Временная регистрация
 
Аватар для sergeyye
 
Регистрация: 12.03.2005
Адрес: Москва
Сообщений: 61
Сказал спасибо: 42
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergeyye на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Большое спасибо всем откликнувшимся. Look22, сегодня всё свободное время было убито на попытки осмыслить написанное Вами. Увы, похвастаться нечем. Мало, что понял. Нехватка познаний в Си. Учить некому.
Короче, сделал так:

PHP код:
  __near u8 __eeprom *EE_Num;   // Указатель на ячейку ЕЕ с системным номером.
  #pragma location = 0x4000     // Aдрес в EEPROM.
  __no_init u8  __eeprom  EE_Number; // Присваиваемый порядковый номер в системе.

/********************* Запись байта в EEPROM по адресу 0x4000 ******************/
void __eeprom_program_byte (u8 Data)
{
  FLASH -› DUKR = 0xAE;                                 // Запись первой половины ключа.
  FLASH -› DUKR = 0x56;                                 // Запись второй половины ключа.
  while (!(FLASH -› IAPSR & FLASH_IAPSR_DUL));          // Ждём разрешения на запись.
  *(__near u8*) EE_Num = Data;                          // Запись данных в ЕЕ.
  FLASH -› IAPSR &= 0xF7;                               // Запретить запись в EE.
}
void __eeprom_program_long(void)                        // Не используется.
{}
void __eeprom_wait_for_last_operation(void)             // Не используется.
{} 
Запустил. Работает.
Имя этой функции должно быть именно таким - иначе ругается IAR. По той-же причине нужны и две последние пустые функции.

Последний раз редактировалось sergeyye; 16.10.2014 в 21:42.
sergeyye вне форума   Ответить с цитированием
Непрочитано 01.10.2014, 05:46   #368
look22
Частый гость
 
Аватар для look22
 
Регистрация: 10.10.2006
Адрес: Новосибирск
Сообщений: 30
Сказал спасибо: 41
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
look22 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от sergeyye Посмотреть сообщение
Что означает содержимое скобок?
__near указывает размер указателя равный 2 байтам
look22 вне форума   Ответить с цитированием
Сказали "Спасибо" look22
sergeyye (01.10.2014)
Непрочитано 08.11.2014, 04:25   #369
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Комрады, кто сам писал функцию преобразования числа в строку? Интересует именно float to string. Я, конечно, написал, но коряво вышло. Работать-то работает, но удовлетворения от красоты кода не ощущаю.
Easyrider83 вне форума   Ответить с цитированием
Непрочитано 08.11.2014, 18:59   #370
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Вот пример из гугля, мною доработанный т.к. отрицательные числа не выводил и числа около нуля тоже. Теперь работает с двумя костылями.
Код:
int intToStr(int x, char str[], int d)
{
    int i = 0;
    while (x)
    {
        str[i++] = (x%10) + '0';
        x = x/10;
    }
    while (i ‹ d)
        str[i++] = '0';

    reverse(str, i);
    str[i] = '\0';
    return i;
}

// Converts a floating point number to string.
void ftoa(float n, char *res, int afterpoint)
{
    char m = 0;
    int ipart;
    float fpart;
    int i;
    if (n ‹ 0)
    {
      n = -n;
      m = 1;
      res[0] = '-';
    }
    if ((char)n == 0)
    {
      res[1] = '0';
      m++;
    }
    ipart = (int)n;
    fpart = n - (float)ipart;
    i = intToStr(ipart, res + m, 0);
    if (afterpoint != 0)
    {
        res[i+m] = '.';  // add dot
        fpart = fpart * pow(10, afterpoint);
        intToStr((int)fpart, res + i + 1 + m, afterpoint);
    }
}
void reverse(char *str, int len)
{
    int i=0, j=len-1, temp;
    while (i‹j)
    {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++; j--;
    }
}
Easyrider83 вне форума   Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06


Часовой пояс GMT +4, время: 12:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.