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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 31.12.2013, 03:20  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Почему переменная типа int занимает два байта в памяти данных

Здраво Знатоки, Всех с Наступающим НГ . Объясните почему переменная типа int занимает всего два байта в памяти данных МК AVR ATmega32, вместо 4-х байтов. Код ниже прилагаю.
PHP код:
#define  F_CPU 1000000ul
#include ‹avr/io.h›
#include ‹util/delay.h›
#include ‹inttypes.h›
#include ‹stdlib.h›
unsigned int s7displey[3];
int summa ;
//*************************************/

 
unsigned char massiv (void)
 {
     
unsigned char min=255;
     
int  sum;
     
unsigned char  Array[700];
     for (
int i=0;isizeof(Array);++i)
     {Array[
i]=255;
         if ( 
min › Array[i]) min = Array[i];  //  вычисляю минимальный элемент массива
     
sum +=Array[i];    }                        //  получаю  сумму элементов массива
     
summa = (sum/sizeof(Array));
     
summa=summa*3+min;} 
относится это к переменной "sum" которая должна хранить результат выражения : 255*700 = 178500(10) или 2b944(16) , из-за этого у меня не правильные данные МК выдает. , Прилагается снимок дебаггера с программой где в окне Watch1 можно сравнить адрес и значение переменной sum c окном memory1.
Миниатюры:
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 326
Размер:	312.1 Кб
ID:	56963  
Реклама:
Fraktal вне форума  
Непрочитано 31.12.2013, 03:37  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Почему переменная типа int занимает два байта в памяти данных

Проблему решил uint32_t , теория загубила integer всегда был 4 байта вото и провел параллель. Всем Спасибо и еще раз с Наступающим.
Fraktal вне форума  
Непрочитано 01.01.2014, 00:34  
projects.org.ua
Заблокирован
 
Регистрация: 15.10.2010
Адрес: Kiev/Kharkov
Сообщений: 133
Сказал спасибо: 15
Сказали Спасибо 21 раз(а) в 21 сообщении(ях)
projects.org.ua на пути к лучшему
По умолчанию Re: Почему переменная типа int занимает два байта в памяти данных

Есть один момент, который является весьма часто заблуждением. А именно - int (он же integer, то есть просто переменная) не всегда 4 байтный, а на самом деле - переменная архитектурно зависимого типа. Дело в том что бывают случаи когда int и 1 байт, это на старых архитектурах (если верно помню, чтото типа PDP10), а также инт бывает и 8 байт. Ровно как и даже если архитектура 32битная инт не обязательно будет 32х битный, нужно читать инфу на архитектуру. По этому самая грубая ошибка объявлять переменные типом int, нужно всегда явно типизировать.
Кстати такая же путаница иногда случается и с типом double (например TMS320) где double=float(4 байта).

C long тоже...
на х86:
sizeof(int)=4, sizeof(long)=4, sizeof(long long)=8
на х86_64:
sizeof(int)=4, sizeof(long)=8, sizeof(long long)=8

Последний раз редактировалось projects.org.ua; 02.01.2014 в 06:55.
projects.org.ua вне форума  
Сказали "Спасибо" projects.org.ua
Fraktal (03.01.2014)
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Определение младшего и старшего байта числа типа int. Нужна подсказка Andrey31380 Embedd С 82 17.06.2013 13:29
Научите int в два байта и наоборот? ) whoim Электроника - это просто 4 13.08.2012 21:56


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


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