Fix building on arm64

pull/91/head
Lan Tian 2019-10-19 01:13:57 +08:00
rodzic c735b6f834
commit a3adb741ab
3 zmienionych plików z 20 dodań i 20 usunięć

Wyświetl plik

@ -61,7 +61,7 @@ void *mapmem(unsigned base, unsigned size)
printf("base=0x%x, mem=%p\n", base, mem); printf("base=0x%x, mem=%p\n", base, mem);
#endif #endif
if (mem == MAP_FAILED) { if (mem == MAP_FAILED) {
printf("mmap error %d\n", (int)mem); printf("mmap error %ld\n", (long)mem);
exit (-1); exit (-1);
} }
close(mem_fd); close(mem_fd);

Wyświetl plik

@ -114,7 +114,7 @@ struct DMARegisters {
}; };
struct AllocatedMemory { struct AllocatedMemory {
uint32_t handle, size, physicalBase, virtualBase; uintptr_t handle, size, physicalBase, virtualBase;
int mBoxFd; int mBoxFd;
}; };
@ -169,17 +169,17 @@ float Transmitter::getSourceFreq()
return (getPeripheralsVirtBaseAddress() == BCM2838_PERI_VIRT_BASE) ? BCM2838_PLLD_FREQ : BCM2835_PLLD_FREQ; return (getPeripheralsVirtBaseAddress() == BCM2838_PERI_VIRT_BASE) ? BCM2838_PLLD_FREQ : BCM2835_PLLD_FREQ;
} }
uint32_t Transmitter::getPeripheralPhysAddress(volatile void *object) { uintptr_t Transmitter::getPeripheralPhysAddress(volatile void *object) {
return PERIPHERALS_PHYS_BASE + (reinterpret_cast<uint32_t>(object) - reinterpret_cast<uint32_t>(peripherals)); return PERIPHERALS_PHYS_BASE + (reinterpret_cast<uintptr_t>(object) - reinterpret_cast<uintptr_t>(peripherals));
} }
uint32_t Transmitter::getPeripheralVirtAddress(uint32_t offset) { uintptr_t Transmitter::getPeripheralVirtAddress(uintptr_t offset) {
return reinterpret_cast<uint32_t>(peripherals) + offset; return reinterpret_cast<uintptr_t>(peripherals) + offset;
} }
uint32_t Transmitter::getMemoryPhysAddress(AllocatedMemory &memory, volatile void *object) uintptr_t Transmitter::getMemoryPhysAddress(AllocatedMemory &memory, volatile void *object)
{ {
return memory.physicalBase + (reinterpret_cast<uint32_t>(object) - memory.virtualBase); return memory.physicalBase + (reinterpret_cast<uintptr_t>(object) - memory.virtualBase);
} }
AllocatedMemory Transmitter::allocateMemory(uint32_t size) AllocatedMemory Transmitter::allocateMemory(uint32_t size)
@ -196,7 +196,7 @@ AllocatedMemory Transmitter::allocateMemory(uint32_t size)
return memory; return memory;
} }
memory.physicalBase = mem_lock(memory.mBoxFd, memory.handle); memory.physicalBase = mem_lock(memory.mBoxFd, memory.handle);
memory.virtualBase = reinterpret_cast<uint32_t>(mapmem(memory.physicalBase & ~0xC0000000, size)); memory.virtualBase = reinterpret_cast<uintptr_t>(mapmem(memory.physicalBase & ~0xC0000000, size));
memory.size = size; memory.size = size;
return memory; return memory;
} }
@ -278,7 +278,7 @@ void Transmitter::transmit(WaveReader &reader, float frequency, float bandwidth,
transmitting = true; transmitting = true;
PCMWaveHeader header = reader.getHeader(); PCMWaveHeader header = reader.getHeader();
uint32_t bufferSize = static_cast<uint32_t>(static_cast<uint64_t>(header.sampleRate) * BUFFER_TIME / 1000000); uint32_t bufferSize = static_cast<uint32_t>(static_cast<uintptr_t>(header.sampleRate) * BUFFER_TIME / 1000000);
preserveCarrier = preserveCarrierOnExit; preserveCarrier = preserveCarrierOnExit;
clockDivisor = static_cast<uint32_t>(round(getSourceFreq() * (0x01 << 12) / frequency)); clockDivisor = static_cast<uint32_t>(round(getSourceFreq() * (0x01 << 12) / frequency));
@ -382,8 +382,8 @@ void Transmitter::transmitViaDma(WaveReader &reader, uint32_t bufferSize, uint8_
#endif #endif
volatile DMAControllBlock *dmaCb = reinterpret_cast<DMAControllBlock *>(dmaMemory.virtualBase); volatile DMAControllBlock *dmaCb = reinterpret_cast<DMAControllBlock *>(dmaMemory.virtualBase);
volatile uint32_t *clkDiv = reinterpret_cast<uint32_t *>(reinterpret_cast<uint32_t>(dmaCb) + 2 * sizeof(DMAControllBlock) * bufferSize); volatile uint32_t *clkDiv = reinterpret_cast<uint32_t *>(reinterpret_cast<uintptr_t>(dmaCb) + 2 * sizeof(DMAControllBlock) * bufferSize);
volatile uint32_t *pwmFifoData = reinterpret_cast<uint32_t *>(reinterpret_cast<uint32_t>(clkDiv) + sizeof(uint32_t) * bufferSize); volatile uint32_t *pwmFifoData = reinterpret_cast<uint32_t *>(reinterpret_cast<uintptr_t>(clkDiv) + sizeof(uint32_t) * bufferSize);
for (i = 0; i < bufferSize; i++) { for (i = 0; i < bufferSize; i++) {
float value = samples[i].getMonoValue(); float value = samples[i].getMonoValue();
#ifndef NO_PREEMP #ifndef NO_PREEMP
@ -459,11 +459,11 @@ void Transmitter::transmitThread()
#endif #endif
volatile TimerRegisters *timer = reinterpret_cast<TimerRegisters *>(getPeripheralVirtAddress(TIMER_BASE_OFFSET)); volatile TimerRegisters *timer = reinterpret_cast<TimerRegisters *>(getPeripheralVirtAddress(TIMER_BASE_OFFSET));
uint64_t current = *(reinterpret_cast<volatile uint64_t *>(&timer->low)); uintptr_t current = *(reinterpret_cast<volatile uintptr_t *>(&timer->low));
uint64_t playbackStart = current; uintptr_t playbackStart = current;
while (transmitting) { while (transmitting) {
uint64_t start = current; uintptr_t start = current;
bool locked = samplesMutex.try_lock(); bool locked = samplesMutex.try_lock();
auto unlock = [&]() { auto unlock = [&]() {
@ -474,7 +474,7 @@ void Transmitter::transmitThread()
while ((!locked || !samples.size()) && transmitting) { while ((!locked || !samples.size()) && transmitting) {
unlock(); unlock();
std::this_thread::sleep_for(std::chrono::microseconds(1)); std::this_thread::sleep_for(std::chrono::microseconds(1));
current = *(reinterpret_cast<volatile uint64_t *>(&timer->low)); current = *(reinterpret_cast<volatile uintptr_t *>(&timer->low));
locked = samplesMutex.try_lock(); locked = samplesMutex.try_lock();
} }
if (!transmitting) { if (!transmitting) {
@ -499,7 +499,7 @@ void Transmitter::transmitThread()
output->div = (0x5A << 24) | (clockDivisor - static_cast<int32_t>(round(value * divisorRange))); output->div = (0x5A << 24) | (clockDivisor - static_cast<int32_t>(round(value * divisorRange)));
while (offset == prevOffset) { while (offset == prevOffset) {
std::this_thread::sleep_for(std::chrono::microseconds(1)); // asm("nop"); std::this_thread::sleep_for(std::chrono::microseconds(1)); // asm("nop");
current = *(reinterpret_cast<volatile uint64_t *>(&timer->low));; current = *(reinterpret_cast<volatile uintptr_t *>(&timer->low));;
offset = (current - start) * sampleRate / 1000000; offset = (current - start) * sampleRate / 1000000;
} }
} }

Wyświetl plik

@ -58,9 +58,9 @@ class Transmitter
uint32_t getPeripheralsVirtBaseAddress(); uint32_t getPeripheralsVirtBaseAddress();
uint32_t getPeripheralsSize(); uint32_t getPeripheralsSize();
float getSourceFreq(); float getSourceFreq();
uint32_t getPeripheralPhysAddress(volatile void *object); uintptr_t getPeripheralPhysAddress(volatile void *object);
static uint32_t getPeripheralVirtAddress(uint32_t offset); static uintptr_t getPeripheralVirtAddress(uintptr_t offset);
uint32_t getMemoryPhysAddress(AllocatedMemory &memory, volatile void *object); uintptr_t getMemoryPhysAddress(AllocatedMemory &memory, volatile void *object);
AllocatedMemory allocateMemory(uint32_t size); AllocatedMemory allocateMemory(uint32_t size);
void freeMemory(AllocatedMemory &memory); void freeMemory(AllocatedMemory &memory);
volatile PWMRegisters *initPwmController(); volatile PWMRegisters *initPwmController();