реклама на сайте
подробности

 
 
> Битовые сдвиги
CSB
сообщение Jun 17 2006, 15:01
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Код

#include <iom8.h>

void main(void)
{
    unsigned long int a, n;

    n = 16;
    a = 1 << n;
    PORTB = a;
}

По идее в переменной "а" должен быть установлен 16 бит, а на деле там 0. Какие есть идеи?

Компилятор:
IAR C/C++ Compiler for AVR
4.12A/W32 [Evaluation] (4.12.1.3)

Для просмотра значений переменных использую родной симулятор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CSB
сообщение Jun 17 2006, 17:37
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Господа, каюсь smile.gif
Я забыл про одну весьма немаловажную вещь: volatile!
Забыл с самого начала и что-бы компилятор не выкидывал код я делал PORTB = a; проверив перед этим: а вдруг "умный" компилятор посчитает старшую часть числа не нужной и не будет ее вычислять; для 16-битовых чисел все работало.

2 Сергей Борщ:
Большое спасибо!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 01:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016