Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


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

IAR Embedded Workbench

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

Сообщение от SasaVitebsk Посмотреть сообщение
Поэтому удивляет, когда народ Си ругает, хотя Си - это просто инструмент. И им надо грамотно пользоваться ...
Это да. К нему еще надо привыкнуть, особенно к микроконтроллерному.
Признаюсь, я намучался с приведением типов. Конструкция была примерно такая:
PHP код:
//Конвертация штампа в массив времени индикатора
void TimeStamp_to_DataTime(unsigned long int ST)
{
 unsigned char i;
 
  for(i=0; i‹4; i++)
  {
    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=0; i‹4; i++)
  {
    j =ST / koef[i];
    DataTime[i] =(unsigned char)j;
    ST-=j * koef[i];
  }
  DataTime[i]=(unsigned char)ST;
} 
все стало на свои места.
Насколько мне стало понятно, даже если программа все вроде считает и показывает правильно, то все равно НЕОБХОДИМО приводить типы данных.
Реклама:
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума   Ответить с цитированием
Непрочитано 24.02.2013, 20:39   #102
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
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   #103
woroba
Гражданин KAZUS.RUN
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 862
Сказал спасибо: 98
Сказали Спасибо 216 раз(а) в 139 сообщении(ях)
woroba на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Здесь кто то выкладывал библиотеку для дублей, и совсем не давно.
А вообще зачем такая разрядность, в году 31 536 000 секунд???
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума   Ответить с цитированием
Непрочитано 24.02.2013, 21:58   #104
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   #105
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

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

Что за
Сообщение от woroba Посмотреть сообщение
библиотеку для дублей
и где она, а главное зачем.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума   Ответить с цитированием
Непрочитано 24.02.2013, 23:15   #106
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 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   #107
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
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   #108
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

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

Т.е. то, что я ему изначально ввожу тип контроллера из его же списка и говорю, что буду использовать числа 64 бит этого не достаточно?
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума   Ответить с цитированием
Непрочитано 25.02.2013, 00:48   #110
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 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, время: 03:21.


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