Exemple #1
0
void * producer_proc(void *arg)
{
	struct ringbuffer *ring_buf = (struct ringbuffer *)arg;
	char i;

	i = 0;
	while(1)
	{
		printf("******************************************\n");
		printf("put datas to ring buffer.\n");
		

		if (ringbuffer_is_full(ring_buf)) {
			printf("buffer is full !\n");
			sleep(1);
			continue;
		}
		ringbuffer_put(ring_buf, &i, sizeof(i));
		i++;

		printf("ring buffer length: %u\n", ringbuffer_len(ring_buf));
		printf("******************************************\n");
		sleep(1);
	}
}
Exemple #2
0
int ringbuffer_put(RINGBUFFER_T *buffer, char character) {
    //is there space in the buffer?
    int bufferMask = (buffer->size - 1);

    if ( ((buffer->write_pos + 1) & bufferMask) != (buffer->read_pos & bufferMask)) {
        //wrap around write position
        buffer->write_pos &= bufferMask;

        //write the character
        buffer->memory[buffer->write_pos++] = character;
        //update size info

        return ringbuffer_len(buffer);
    } else {
        return BUFFER_OVERFLOW;
    }
}
Exemple #3
0
void * consumer_proc(void *arg)
{
	unsigned int cnt;
	struct ringbuffer *ring_buf = (struct ringbuffer *)arg;

	cnt = 0;

	while(1)
	{
		sleep(2);
		printf("------------------------------------------\n");
		printf("get data from ring buffer.\n");
			
		{
			char i;
			
			if (ringbuffer_is_empty(ring_buf)) {
				printf("buffer is empty !\n");
				sleep(1);
				continue;
			}

			if (cnt !=0 && !(cnt % 16))
				printf("\n");

			ringbuffer_get(ring_buf, &i, sizeof(i));

			printf("data is: %d \n", i);

			cnt++;
		}


		printf("ring buffer length: %u\n", ringbuffer_len(ring_buf));
		printf("------------------------------------------\n");
	}
}
Exemple #4
0
int getchar()
{
    while(!ringbuffer_len(&ringbuffer)) _NOP();
    return ringbuffer_get(&ringbuffer);
}