ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
154235 Топик полностью
picavr (20.04.2009 02:24, просмотров: 2) ответил Т.Достоевский на Та эта, tempkey & = 0xffffff00 знак равно забыл. Там должны были вонинги быть.
Спасибо за подсказку... изменил как вы сказали, но компилируется так же. 1) Ругается на строчку: считывания 15 го бита if (!PINB_Bit7) {temp |= 1<<15;} такими словами: integer conversion resulted in a change of sign (конверсия целого числа, приводимая к изменению знака) То есть говорит что сдвигаемый бит изменяет знак числа??? Но во первых знак числа у нас хранится в СТАРШЕМ БИТЕ, а ведь переменная LONG=32 битная, до знака ещё сдвигать и сдвигать... а во вторых она обьявлена UNSIGNED (беззнаковый) LONG, какой же нахрен знак??? 2) и ругается на все строчки считывания битов 16-23 и 24-31, такими словами: shift count is too large (граф перемещения - слишком большие порты) то ли сдвигаемый слишком крупный? длинный? то ли двигаем слишком далеко.. из ругательств следует, что компилятор считает переменную не LONG(32) а SIGNED INT(16)ЗНАКОВУЮ!!! тогда его ругательства понятны, слишком далеко сдвигаем 16-31 бита, а 15 бит изменяет ЗНАК... но пременная обьявлена UNSIGNED LONG!!! и выделяет он 4 регистра под неё! добавил строчку: tempkey = 0xffffffff; как положено загрузил в неё число 0xffffffff. Когда изменил на SIGNED LONG то ругательство на строчку if (!PINB_Bit7) {temp |= 1<<15;} пропало, то есть знак уже не меняется... но ведь SIGNED это ЗНАКОВЫЙ.. или я чего то не так понял? Когда заменил UNSIGNED LONG на UNSIGNED INT. ругается точно так же но выделяет уже 2 регистра под переменную.. Из всего вышеперечисленного я понял, что скорее всего неправильно сдвигаю биты из порта в 16-31 биты.. кто подскажет? (но если первые 16 сдвигает правильно, то в чём прикол, непонятно!!!)