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

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

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

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

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

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


 
Опции темы
Непрочитано 23.02.2013, 02:04  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от SasaVitebsk Посмотреть сообщение
Поэтому удивляет, когда народ Си ругает, хотя Си - это просто инструмент. И им надо грамотно пользоваться ...
Это да. К нему еще надо привыкнуть, особенно к микроконтроллерному.
Признаюсь, я намучался с приведением типов. Конструкция была примерно такая:
PHP код:
//Конвертация штампа в массив времени индикатора
void TimeStamp_to_DataTime(unsigned long int ST)
{
 
unsigned char i;
 
  for(
i=0i4i++)
  {
    
DataTime[i]=ST/koef[i];
    
ST-=DataTime[i]*koef[i];
  }
  
DataTime[i]=ST;

массив koef -unsigned long int, а вот DataTime -unsigned char

Процедура работала, все отображалось правильно, но программа в некоторых местах вылетала, портила переменные никак не связанные с индикацией, в общем была непредсказуемой. Какая-то неотлавливаемая и непонятная чертовщина. Два дня - хоть вешайся.

Когда привел строго к типам:
PHP код:
//Конвертация штампа в массив времени индикатора
void TimeStamp_to_DataTime(unsigned long int ST)
{
 
unsigned char i;
 
unsigned long int j;
 
  for(
i=0i4i++)
  {
    
=ST koef[i];
    
DataTime[i] =(unsigned char)j;
    
ST-=koef[i];
  }
  
DataTime[i]=(unsigned char)ST;

все стало на свои места.
Насколько мне стало понятно, даже если программа все вроде считает и показывает правильно, то все равно НЕОБХОДИМО приводить типы данных.
Реклама:
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 24.02.2013, 20:39  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Вот еще вопрос такого плана.
Возможна ли нормальная работа 8-ми битных контроллеров с числами long long (double)?
Где можно почитать на эту тему, желательно на русском, подозреваю, что дело в настройках среды.
Решил в целях освоения СИ и IAR сделать себе на кухню таймер с цифровой коррекцией хода, а там без 64-битных чисел не обойтись.
У меня переменные налазят друг на друга при операциях именно с long long с и портят друг-друга. Компилятор ошибок не выдает.

IAR C/C++ Compiler V5.51.0.50312/W32 for Atmel AVR
Контроллер ATMega8a.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 24.02.2013, 21:27  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Здесь кто то выкладывал библиотеку для дублей, и совсем не давно.
А вообще зачем такая разрядность, в году 31 536 000 секунд???
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 24.02.2013, 21:58  
MaslovVG
Частый гость
 
Регистрация: 21.02.2013
Адрес: Волгодонск
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
MaslovVG на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Возможна ли нормальная работа 8-ми битных контроллеров с числами long long (double)?
Где можно почитать на эту тему, желательно на русском,
По алгоритмам классика
Д.Кнут "Искусство программирования для ЭВМ. том 3 Получисленные алгоритмы"
MaslovVG вне форума  
Непрочитано 24.02.2013, 21:58  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от woroba Посмотреть сообщение
А вообще зачем такая разрядность
Я секунду меряю в тиках за час, два... до 24 часов, потом ввожу коррекцию для 16-ти битного таймера, который ее формирует. Поэтому каждая секунда будет уже откорректирована по длительности. В двух словах как-то так.

Что за
Сообщение от woroba Посмотреть сообщение
библиотеку для дублей
и где она, а главное зачем.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 24.02.2013, 23:15  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Всё смешалось кони люди...
1. double это число с плавующей запятой удвоенной точности. 8 байт.
long long это 64 битное целое число. Тоже 8 байт. Это вещи совершенно разные ... в принципе и в обработке. Например умножение long long чисел займёт десятки тактов, а умножение double тысячи либо десятки тысяч. Для 8-битного контроллера ....
2. Компилятор не сделает ошибки, если вы применили стандартный тип. И уж тем более никогда не залезет на другую переменную. Для этого он и компилятор. Это может происходить лишь по причине неграмотного использования указателей, массивов либо неверного указания размера стека.
3. Действия компилятор по приведению типов строго регламентировано стандартом языка. По умолчанию все арифметические выражения будут приводится к базовому типу (int), соответственно для работы с long int необходимо указывать конкретно.
SasaVitebsk вне форума  
Непрочитано 24.02.2013, 23:20  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Изменил в General Options параметр Memory model с Tiny на Small, а также добавил во вкладке Systems размер CSTACK до 0x40 против 0x20 - все пошло.
Почему же тогда компилятор гордо молчал, что ему места мало?

ps
Вы уж меня простите за нубские вопросы.
__________________
Мелочи не решают главного. Они решают всё!

Последний раз редактировалось gary2007; 24.02.2013 в 23:22.
gary2007 вне форума  
Непрочитано 25.02.2013, 00:09  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Почему же тогда компилятор гордо молчал, что ему места мало?
Компилятору достаточно места ...
Вашей программе его было мало ... А компилятору в IBM-ке полно места ...
====
Представьте, что вы выдаёте билеты и вам надо их столько выдать, чтобы все уехали ... Но только вы маршрут автобуса не знаете и число остановок детально тоже ...
Но при этом кассир выдал билеты правильно ... А то что автобус по ходу езды ещё подобрал десятки людей ... ктож виноват?
===
Определить глубину стека задача не очень простая.... Самый простой способ запустить на выполнение процессор под отладчиком и посмотреть куда залез стек.... Либо высчитать. Глубину стека для каждой п/п компилятор считает. надо только вложенность оценить ...
SasaVitebsk вне форума  
Непрочитано 25.02.2013, 00:22  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Т.е. то, что я ему изначально ввожу тип контроллера из его же списка и говорю, что буду использовать числа 64 бит этого не достаточно?
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 25.02.2013, 00:48  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

А какое это вообще к стеку имеет отношение? К стеку имеет отношение например уровень вложенности подпрограмм и прерываний. Сколько у вас переменных локальных в п/п. Внешние вызовы ... Например ф-ции printf много памяти жрут... Причём в зависимости от числа и вида аргументов ...
SasaVitebsk вне форума  
 

Закладки
Опции темы

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

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

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

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


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


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