Compare the bytes in two buffers
#include <string.h> int memcmp( const void* s1, const void* s2, size_t length ); int memcmp_isr( const void* s1, const void* s2, size_t length );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The memcmp() function compares length bytes of the buffer pointed to by s1 to the buffer pointed to by s2. The memcmp_isr() function is similar, but it's safe for you to use it in an interrupt service routine.
#include <stdio.h> #include <string.h> #include <stdlib.h> int main( void ) { char buffer[80]; int retval; strcpy( buffer, "World" ); retval = memcmp( buffer, "hello", 5 ); if( retval < 0 ) { printf( "Less than\n" ); } else if( retval == 0 ) { printf( "Equal to\n"); } else { printf( "Greater than\n"); } return EXIT_SUCCESS; }
produces the output:
Less than
Processes that register ISRs shouldn't use the NEON versions.
memcmp() is ANSI, POSIX 1003.1; memcmp_isr() is QNX Neutrino.
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | Read the Caveats |
Signal handler | Yes |
Thread | Yes |
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | Yes |
Signal handler | Yes |
Thread | Yes |
Implementations of memcmp() that are optimized using SIMD instructions aren't safe to use in an interrupt handler. These include the NEON implementations on ARMv7 and AArch64.