mirror of
https://github.com/danog/system-bus-radio.git
synced 2024-12-02 19:17:48 +01:00
Merge branch 'master' of https://github.com/hmage/system-bus-radio into hmage-master
* 'master' of https://github.com/hmage/system-bus-radio: Use absolute time as per PR#3. Fix compilation warning Compiles on both linux and mach add make clean target Fix compilation on 32bit Add makefile
This commit is contained in:
commit
91cfdfc9ed
8
Makefile
Normal file
8
Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
CPPFLAGS=-Wall -O2 -msse2
|
||||
|
||||
main: main.c
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
clean:
|
||||
rm -f main
|
40
main.c
40
main.c
@ -4,10 +4,46 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <emmintrin.h>
|
||||
#include <inttypes.h>
|
||||
#include <time.h>
|
||||
#ifdef __MACH__
|
||||
#include <mach/mach_traps.h>
|
||||
#include <mach/mach_time.h>
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#ifndef NSEC_PER_SEC
|
||||
#define NSEC_PER_SEC 1000000000ull
|
||||
#endif
|
||||
|
||||
#ifndef __MACH__
|
||||
#define TIME_ABSOLUTE CLOCK_REALTIME
|
||||
typedef struct timespec mach_timespec_t;
|
||||
typedef unsigned int mach_port_t;
|
||||
|
||||
static inline uint64_t mach_absolute_time(void) {
|
||||
mach_timespec_t tp;
|
||||
int res = clock_gettime(CLOCK_REALTIME, &tp);
|
||||
if (res < 0) {
|
||||
perror("clock_gettime");
|
||||
exit(1);
|
||||
}
|
||||
uint64_t result = tp.tv_sec * NSEC_PER_SEC;
|
||||
result += tp.tv_nsec;
|
||||
return result;
|
||||
}
|
||||
|
||||
// non-conformant wrapper just for the purposes of this application
|
||||
static inline void clock_sleep_trap(mach_port_t clock_port, int sleep_type, time_t sec, long nsec, mach_timespec_t *remain) {
|
||||
mach_timespec_t req = { sec, nsec };
|
||||
int res = clock_nanosleep(sleep_type, TIMER_ABSTIME, &req, remain);
|
||||
if (res < 0) {
|
||||
perror("clock_nanosleep");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
#endif // __MACH__
|
||||
|
||||
__m128i reg;
|
||||
__m128i reg_zero;
|
||||
__m128i reg_one;
|
||||
@ -35,14 +71,16 @@ static inline void square_am_signal(float time, float frequency) {
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifdef __MACH__
|
||||
mach_timebase_info_data_t theTimeBaseInfo;
|
||||
mach_timebase_info(&theTimeBaseInfo);
|
||||
puts("TESTING TIME BASE: the following should be 1 / 1");
|
||||
printf(" Mach base: %u / %u nanoseconds\n\n", theTimeBaseInfo.numer, theTimeBaseInfo.denom);
|
||||
#endif
|
||||
|
||||
uint64_t start = mach_absolute_time();
|
||||
uint64_t end = mach_absolute_time();
|
||||
printf("TESTING TIME TO EXECUTE mach_absolute_time()\n Result: %lld nanoseconds\n\n", end - start);
|
||||
printf("TESTING TIME TO EXECUTE mach_absolute_time()\n Result: %"PRIu64" nanoseconds\n\n", end - start);
|
||||
|
||||
reg_zero = _mm_set_epi32(0, 0, 0, 0);
|
||||
reg_one = _mm_set_epi32(-1, -1, -1, -1);
|
||||
|
Loading…
Reference in New Issue
Block a user