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 сдвигает правильно, то в чём прикол, непонятно!!!)