- __disable_irq();
- avail = usb_buffer_available;
- n = __builtin_clz(avail); // clz = count leading zeros
- if (n >= NUM_USB_BUFFERS) {
- __enable_irq();
- return NULL;
+ do {
+ avail = usb_buffer_available;
+ n = __builtin_clz(avail); // clz = count leading zeros
+ if (n >= NUM_USB_BUFFERS) return NULL;
+
+ //serial_print("malloc:");
+ //serial_phex(n);
+ //serial_print("\n");
+
+ avail_new = avail & ~(0x80000000 >> n);