VirtualWire and AnalogWrite problems

I've made some changes on my RX code to find the problem. By now, my code is like that:

#include <VirtualWire.h>

int redPin = 3;

void setup() {
  Serial.begin(9600);
  Serial.print("Rx ON");
  
  vw_setup(1200); // Bits per sec
  vw_rx_start();    // Start the receiver PLL running
  vw_set_rx_pin(11);

  pinMode(redPin, OUTPUT);
}

void loop() {
  
 
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) {
    
    pulse();
    
    //char redC[3] = {(char)buf[0], (char)buf[1], '\0'};
    //long int red = strtol(redC, NULL, 16);
    setRed(255);
    //analogWrite(redPin, (int)red);  
   
  } 
}

void pulse() {
   for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
      setRed(fadeValue);
      delay(30);                            
    } 
  

    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      setRed(fadeValue);        
      delay(30);                            
    } 
}

void setRed(int value){
   analogWrite(redPin, value);
}

When I call the method setRed() with 255 or 0 everything goes fine. But when I call it with any intermediate value, the arduino stops working (the pulse method is not executed). This crash is random, sometimes after 1 execution, other times after 10 executions.