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

 
 
> Виртуозное владение IARом, предлагаю маленький подфорум
LeoLabs
сообщение May 18 2005, 05:09
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 5-03-05
Пользователь №: 3 082



Предлагаю открыть новую тему, помогающую овладеть всеми хитростями IARa всем начинающим. Также предлагаю вносить свои идеи, фенечки и тонкости, какими пользуетесь при написании проги на ИАРе.

И первый вопрос: - я организовал массив в СИ, с начальным адресом 0х100 и длиной 256 - чар : "__no_init unsigned char MyBuffer [256]@0x100;" - идея сделать кольцевой буффер, для простой работой с указателями (простой инкремент младшего байта указателя), с ним я работаю как в СИ, так и в ассемблере. ?? - как сделать инкремент младшего байта указателя в СИ? и вообще работать только с младшим байтом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
freux
сообщение May 18 2005, 07:10
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 7-02-05
Пользователь №: 2 473



Чтобы просто сделать инкремент младшего байта, придется принять ограничение на возможный размер буфера, а именно, - размер может быть, например, 8,16,32,64,128 или 256. И вот почему:

#define BUFFER_SIZE 128 // 0x80
#define BUFFER_MASK (BUFFER_SIZE - 1) // 0x7F
если эту маску накладывать на постоянно увеличивающийся индекс, то мы не выйдем за границы массива

unsigned char Buffer[BUFFER_SIZE];
Превоначально BufferHead, BufferTail указывают на начало массива:
BufferHead = 0;
BufferTail =0;
Затем, данными заполняют буфер, изменяя, например BufferHead.
Читаем буфер, перемещая BufferTail, пока не упрется в BufferHead:

unsigned char tmptail;
unsigned char accum;
if ( BufferHead != BufferTail )
{
/* calculate buffer index */
tmptail = ( BufferTail+ 1 ) & BUFFER_MASK;
BufferTail= tmptail; /* store new index */
accum = Buffer[tmptail];
// дальше используем accum, как надо
}

Инкремент индекса буфера можно написать короче, контролируя при этом сгенеренный код. Вышеприведенный оставил для наглядности
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:28
Рейтинг@Mail.ru


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