Make syscall an experiment function instead of a core method

This commit is contained in:
Sebastien Bourdeauducq 2014-06-16 23:51:27 +02:00
parent 9db8627081
commit 79f20ebfcf
2 changed files with 18 additions and 5 deletions

View File

@ -17,9 +17,9 @@ class DDS:
@kernel
def pulse(self, frequency, duration):
if self._previous_frequency != frequency:
self.core.syscall("rtio_sync", self.rtio_channel) # wait until output is off
self.core.syscall("dds_program", self.reg_channel, frequency)
syscall("rtio_sync", self.rtio_channel) # wait until output is off
syscall("dds_program", self.reg_channel, frequency)
self._previous_frequency = frequency
self.core.syscall("rtio_set", now()-self.latency, self.rtio_channel, 1)
syscall("rtio_set", now()-self.latency, self.rtio_channel, 1)
delay(duration)
self.core.syscall("rtio_set", now()-self.latency, self.rtio_channel, 0)
syscall("rtio_set", now()-self.latency, self.rtio_channel, 0)

View File

@ -57,9 +57,19 @@ def set_time_manager(time_manager):
global _time_manager
_time_manager = time_manager
class _DummySyscallManager:
def do(self, *args):
raise NotImplementedError("Attempted to interpret kernel without a syscall manager")
_syscall_manager = _DummySyscallManager()
def set_syscall_manager(syscall_manager):
global _syscall_manager
_syscall_manager = syscall_manager
# global namespace for kernels
kernel_globals = "sequential", "parallel", "delay", "now", "at"
kernel_globals = "sequential", "parallel", "delay", "now", "at", "syscall"
class _Sequential:
def __enter__(self):
@ -85,3 +95,6 @@ def now():
def at(time):
_time_manager.set_time(time)
def syscall(*args):
return _syscall_manager.do(*args)