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

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

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

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

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

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


 
Опции темы
Непрочитано 27.09.2014, 22:35  
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  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Это чисто ИАРовский черезжоп. Они вместе с STM славно постарались над обструкцией STM8. Одни не дописали по-человечески хедер (что допиливается ручками), другие надругались в остальном.
Но не переживайте, вариантов то не особо и ИАР даже не самый худший из них.
Тут уже было по EEPROM в STM8, можно же и без атрибута __eeprom.
STM32F0 вне форума  
Непрочитано 30.09.2014, 00:27  
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  
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  
Bear-ku
Временная регистрация
 
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 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  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 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  
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  
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  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Комрады, кто сам писал функцию преобразования числа в строку? Интересует именно float to string. Я, конечно, написал, но коряво вышло. Работать-то работает, но удовлетворения от красоты кода не ощущаю.
Easyrider83 вне форума  
Непрочитано 08.11.2014, 18:59  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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, время: 08:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot