You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I ran into a problem where flags_wait_any_for() is waiting for all specified flags to be set instead of all. Looking at the code in SparkFun\hardware\apollo3\2.2.1\cores\mbed-os\rtos\source\ThisThread.cpp, I think the problem is the use of the osFlagsWaitAll flag instead of osFlagsWaitAny here:
I guess the fix didn't make it over to the Arduino version.
Target(s) affected by this defect ?
All Sparkfun Artemis boards using this library.
Toolchain(s) (name and version) displaying this defect ?
Arduino
What version of Mbed-os are you using (tag or sha) ?
Sparkfun Arduino Apollo3 board driver version 2.2.1
What version(s) of tools are you using. List all that apply (E.g. mbed-cli)
Arduino 1.8.16
How is this defect reproduced ?
The following program will fail to wake up because it is waiting for all flags to be set instead of any:
#define STATUS_COUNT_TOTAL (10)
#define GO_FLAG 1
rtos::Thread thread;
void thread_fn( void ){ // create a function to run as a thread
Serial.begin(115200); // perform setup related to this thread
Serial.print("Apollo3 - Threads\n\n");
uint32_t flags;
rtos::Kernel::Clock::duration_u32 sleep_time;
uint8_t status_count = 0;
while(status_count < STATUS_COUNT_TOTAL)
{
Serial.println("Thread waiting for flag...");
sleep_time = rtos::Kernel::wait_for_u32_forever;
//flags = rtos::ThisThread::flags_wait_any_for(GO_FLAG, sleep_time, true);
flags = rtos::ThisThread::flags_wait_any_for(GO_FLAG|4, sleep_time, true);
Serial.printf("wait returned flags = 0x%x\n", flags);
Serial.printf("time (ms): %d, status count: %d\n", millis(), status_count++);
}
Serial.print("Stopping status thread\n");
Serial.end(); // de-initialiaze for this thread
}
// setup() and loop() run within the function main() which is the first thread
void setup() {
thread.start(thread_fn); // assign thread_fn to the object thread and begin execution
}
void loop() {
delay(2000);
if (osFlagsError == thread.flags_set(GO_FLAG))
{
Serial.println("Failed to set flag!!!");
}
Serial.println("Flag set");
}
The text was updated successfully, but these errors were encountered:
Description of defect
I ran into a problem where flags_wait_any_for() is waiting for all specified flags to be set instead of all. Looking at the code in SparkFun\hardware\apollo3\2.2.1\cores\mbed-os\rtos\source\ThisThread.cpp, I think the problem is the use of the osFlagsWaitAll flag instead of osFlagsWaitAny here:
I noticed that in the Sparkfun/mbed-os-ambiq-apollo3 github repo this seems to have been fixed 2 years ago:
https://github.com/sparkfun/mbed-os-amb ... 31e548eb38
I guess the fix didn't make it over to the Arduino version.
Target(s) affected by this defect ?
All Sparkfun Artemis boards using this library.
Toolchain(s) (name and version) displaying this defect ?
Arduino
What version of Mbed-os are you using (tag or sha) ?
Sparkfun Arduino Apollo3 board driver version 2.2.1
What version(s) of tools are you using. List all that apply (E.g. mbed-cli)
Arduino 1.8.16
How is this defect reproduced ?
The following program will fail to wake up because it is waiting for all flags to be set instead of any:
The text was updated successfully, but these errors were encountered: