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

 
 
> Прошу совета по индексам массивов
king2
сообщение Nov 6 2006, 03:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 255
Регистрация: 17-08-06
Из: Москва
Пользователь №: 19 646



Есть такой вот код:

Код
    171                usb_buffer[usb_txtail++]=0x05;
   \   00000094   9160....           LDS     R22, usb_txtail
   \   00000098   2F56               MOV     R21, R22
   \   0000009A   9553               INC     R21
   \   0000009C   9350....           STS     usb_txtail, R21
   \   000000A0   E055               LDI     R21, 5
   \   000000A2   E070               LDI     R23, 0
   \   000000A4   01FB               MOVW    R31:R30, R23:R22
   \   000000A6   ....               SUBI    R30, LOW((-(usb_buffer) & 0xFFFF))
   \   000000A8   ....               SBCI    R31, (-(usb_buffer) & 0xFFFF) >> 8
   \   000000AA   8350               ST      Z, R21


Изначально предполагалось, что так как usb_txtail unsigned char, то оно досчитает до 255 и начнет снова с нуля без всяких танцев с бубнами. А фиг...

Если после этого вставить строчку:
Код
if (usb_txtail == 255) usb_txtail = 0;

то все работает на ура. Если этой строчки нет - досчитав до 255, начинается какая-то свистопляска, оно выводит содержимое буфера еще раз...

Есть какие-нить идеи на эту тему? smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Nov 13 2006, 14:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(king2 @ Nov 13 2006, 17:26) *
"ОНО" не должно выводить буфер еще раз, потому что вывод написан вот так...
...Даже если заполнять буфер просто инкрементом, то оно потихонечку досчитывает до 255, потом быстро выводит буфер еще раз (уже заполненный) и продолжает.

То есть выходит, что проблема имеет место при выводе данных, а не при вводе?
Go to the top of the page
 
+Quote Post
king2
сообщение Nov 13 2006, 15:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 255
Регистрация: 17-08-06
Из: Москва
Пользователь №: 19 646



Цитата(aaarrr @ Nov 13 2006, 17:57) *
Цитата(king2 @ Nov 13 2006, 17:26) *

"ОНО" не должно выводить буфер еще раз, потому что вывод написан вот так...
...Даже если заполнять буфер просто инкрементом, то оно потихонечку досчитывает до 255, потом быстро выводит буфер еще раз (уже заполненный) и продолжает.

То есть выходит, что проблема имеет место при выводе данных, а не при вводе?

Получается, что так. Фишка в том, что блоки и ввода и вывода одинаковые, индекс вывода "догоняет" индекс ввода, пока они не станут равны. И тот и другой только увеличивается, так что по идее, если индекс ввода поменялся 255->0, то и индекс вывода должен поменяться так же (и вывести байтик).
А оно так не происходит, вместо этого оно каким-то образом проскакивает через проверку равенства индексов и выводит по-новой весь буфер.. sad.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 13 2006, 16:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(king2 @ Nov 13 2006, 22:38) *
А оно так не происходит, вместо этого оно каким-то образом проскакивает через проверку равенства индексов и выводит по-новой весь буфер.. sad.gif
Люди! так и не возьму в толк что ВАМ не понятного? ЕСЛИ и индекс обьявлен, как 8-разрядная переменная, то, естественно, какой бы ни был длины массив, хоть 160 гбайт,выше границы 256 элементов массива, ВЫ не выйдите ни когда) Компилятор будет тупо увеличивать разрядность индекса, дополнением его до нужной разрядности дополнением нулей ПРИ ВЫЧИСЛЕНИИ АБСОЛЮТНОГО АДРЕСА ЭЛЕМЕНТА МАССИВА, НО при выходе индекса (при его инкременте-декременте) за пределы объявленной разрядности, индекс будет урезан до той разрядности, которую ВЫ указали компилятору. В крайнем случае, если компилятор посчитает, что есть НЕОДНОЗНАЧНОСТЬ, он (компилятор) предупредит ВАС соответсвующим предупреждением. Ну.


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- king2   Прошу совета по индексам массивов   Nov 6 2006, 03:02
- - aaarrr   Цитата(king2 @ Nov 6 2006, 06:02) Если по...   Nov 6 2006, 08:57
- - _Bill   Цитата(king2 @ Nov 6 2006, 06:02) Есть та...   Nov 6 2006, 09:38
- - aaarrr   ЦитатаЕсть два варианта: А Вас не смущает то, что ...   Nov 6 2006, 10:18
- - rezident   А тип самого буфера наверное unsigned int? А попро...   Nov 6 2006, 10:37
|- - prottoss   Скомпилил вот такой код: КодUCHAR bfr[300...   Nov 6 2006, 12:00
|- - rezident   Цитата(prottoss @ Nov 6 2006, 17:00) НИКО...   Nov 6 2006, 12:57
|- - prottoss   Цитата(rezident @ Nov 6 2006, 19:57) Цита...   Nov 6 2006, 16:27
|- - sz36   Цитата(rezident @ Nov 6 2006, 15:57) Цита...   Nov 9 2006, 23:58
|- - prottoss   Цитата(sz36 @ Nov 10 2006, 06:58) Цитата(...   Nov 10 2006, 12:19
- - aaarrr   Цитата(rezident @ Nov 6 2006, 15:57) Еще ...   Nov 6 2006, 13:11
- - rezident   Вот еще в Википедии отыскал существенное (по-моему...   Nov 6 2006, 13:51
- - IgorKossak   Цитата(king2 @ Nov 6 2006, 05:02) А фиг.....   Nov 6 2006, 14:50
- - aaarrr   Цитата(rezident @ Nov 6 2006, 16:51) Вот ...   Nov 6 2006, 14:56
|- - rezident   Цитата(aaarrr @ Nov 6 2006, 19:56) Цитата...   Nov 6 2006, 15:02
- - aaarrr   Цитата(rezident @ Nov 6 2006, 18:02) ОК ...   Nov 6 2006, 15:20
- - _Sam_   Я вообще не понял в чём проблема! Цитатаесли ...   Nov 8 2006, 08:06
|- - prottoss   Цитата(_Sam_ @ Nov 8 2006, 15:06) Цитатан...   Nov 8 2006, 08:30
- - ARIM   Цитата(king2 @ Nov 6 2006, 06:02) начинае...   Nov 8 2006, 12:01
- - king2   Отвечаю сразу всем. Если вынести инкремент в отдел...   Nov 13 2006, 14:26
- - aaarrr   А как при условии равенства индексов определить, с...   Nov 13 2006, 16:04
- - king2   Посылательный код: Код //! writes byte in FIFO...   Nov 13 2006, 21:25
- - _Sam_   ЦитатаВопрос в том, почему при переходе через 0 он...   Nov 14 2006, 06:48
|- - king2   Цитата(_Sam_ @ Nov 14 2006, 09:48) Цитата...   Nov 14 2006, 13:45
- - _Sam_   Могли бы и целиком код привести. И указать в этом ...   Nov 15 2006, 06:43
- - king2   Итак, проблема найдена, вопрос закрыт. Дело было ...   Nov 22 2006, 00:56


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

 


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


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