Okay, I have the following small function that generates a random number:
float random_weight_ (void){ extern struct NMEAGPRMC NMEA_GPRMC; // compute time for seed, entropy char sys_time[7]; sys_time[0] = NMEA_GPRMC.UTC_Time[0]; sys_time[1] = NMEA_GPRMC.UTC_Time[1]; sys_time[2] = NMEA_GPRMC.UTC_Time[3]; sys_time[3] = NMEA_GPRMC.UTC_Time[4]; sys_time[4] = NMEA_GPRMC.UTC_Time[6]; sys_time[5] = NMEA_GPRMC.UTC_Time[7]; sys_time[6] = '\0'; char sys_date[7]; // compute date for seed, entropy sys_date[0] = NMEA_GPRMC.UTC_Date[0]; sys_date[1] = NMEA_GPRMC.UTC_Date[1]; sys_date[2] = NMEA_GPRMC.UTC_Date[3]; sys_date[3] = NMEA_GPRMC.UTC_Date[4]; sys_date[4] = NMEA_GPRMC.UTC_Date[6]; sys_date[5] = NMEA_GPRMC.UTC_Date[7]; sys_date[6] = '\0'; // A Mersenne Twister pseudo-random generator of 64-bit numbers with a state size of 19937 bits. auto generator = std::mt19937_64{ std::random_device {}() }; // include entropy into the random number generator generator.seed((unsigned long long int)std::stoi(&sys_time[0]) + std::stoi(&sys_date[0])); auto distribution = std::uniform_real_distribution<float>{ -1.0, 1.0 }; // generate random number return distribution(generator); }
The function works perfectly when called within main, but within a task (yesy, a kernel) it runs once then dies. Would it be stack allignemnt?
Slán,
Wm
EDITED: when I declare the generator static and load (call it first in main) it in main it works okay when called within a task.