* @brief Create a ring buffer object with a given size. * * @param size The size of the buffer in bytes. * * @return Return a pointer to ring buffer object. When the return value is RT_NULL, it means this creation failed. */
| 423 | * @return Return a pointer to ring buffer object. When the return value is RT_NULL, it means this creation failed. |
| 424 | */ |
| 425 | struct rt_ringbuffer *rt_ringbuffer_create(rt_uint32_t size) |
| 426 | { |
| 427 | struct rt_ringbuffer *rb; |
| 428 | rt_uint8_t *pool; |
| 429 | |
| 430 | RT_ASSERT(size > 0); |
| 431 | |
| 432 | size = RT_ALIGN_DOWN(size, RT_ALIGN_SIZE); |
| 433 | |
| 434 | rb = (struct rt_ringbuffer *)rt_malloc(sizeof(struct rt_ringbuffer)); |
| 435 | if (rb == RT_NULL) |
| 436 | goto exit; |
| 437 | |
| 438 | pool = (rt_uint8_t *)rt_malloc(size); |
| 439 | if (pool == RT_NULL) |
| 440 | { |
| 441 | rt_free(rb); |
| 442 | rb = RT_NULL; |
| 443 | goto exit; |
| 444 | } |
| 445 | rt_ringbuffer_init(rb, pool, size); |
| 446 | |
| 447 | exit: |
| 448 | return rb; |
| 449 | } |
| 450 | RTM_EXPORT(rt_ringbuffer_create); |
| 451 | |
| 452 | /** |