void resume_callback() { // restart the recording status if (!initialise_recording()) { log_error("Error setting up recording"); rt_error(RTE_SWERR); } }
//! Initialises the model by reading in the regions and checking recording //! data. //! \param[out] timer_period a pointer for the memory address where the timer //! period should be stored during the function. //! \param[out] update_sdp_port The SDP port on which to listen for rate //! updates //! \return boolean of True if it successfully read all the regions and set up //! all its internal data structures. Otherwise returns False static bool initialize() { log_info("Initialise: started"); // Get the address this core's DTCM data starts at from SRAM address_t address = data_specification_get_data_address(); // Read the header if (!data_specification_read_header(address)) { return false; } // Get the timing details and set up the simulation interface if (!simulation_initialise( data_specification_get_region(SYSTEM, address), APPLICATION_NAME_HASH, &timer_period, &simulation_ticks, &infinite_run, SDP, DMA)) { return false; } simulation_set_provenance_data_address( data_specification_get_region(PROVENANCE_REGION, address)); // setup recording region if (!initialise_recording()){ return false; } // Setup regions that specify spike source array data if (!read_global_parameters( data_specification_get_region(POISSON_PARAMS, address))) { return false; } if (!read_poisson_parameters( data_specification_get_region(POISSON_PARAMS, address))) { return false; } // Loop through slow spike sources and initialise 1st time to spike for (index_t s = 0; s < global_parameters.n_spike_sources; s++) { if (!poisson_parameters[s].is_fast_source) { poisson_parameters[s].time_to_spike_ticks = slow_spike_source_get_time_to_spike( poisson_parameters[s].mean_isi_ticks); } } // print spike sources for debug purposes // print_spike_sources(); // Set up recording buffer n_spike_buffers_allocated = 0; n_spike_buffer_words = get_bit_field_size( global_parameters.n_spike_sources); spike_buffer_size = n_spike_buffer_words * sizeof(uint32_t); log_info("Initialise: completed successfully"); return true; }
//! \brief Initialises the model by reading in the regions and checking //! recording data. //! \param[in] timer_period a pointer for the memory address where the timer //! period should be stored during the function. //! \return True if it successfully initialised, false otherwise static bool initialise(uint32_t *timer_period) { log_info("Initialise: started"); // Get the address this core's DTCM data starts at from SRAM address_t address = data_specification_get_data_address(); // Read the header if (!data_specification_read_header(address)) { return false; } // Get the timing details address_t system_region = data_specification_get_region( SYSTEM_REGION, address); if (!simulation_read_timing_details( system_region, APPLICATION_NAME_HASH, timer_period)) { return false; } // setup recording region if (!initialise_recording()){ return false; } // Set up the neurons uint32_t n_neurons; uint32_t incoming_spike_buffer_size; if (!neuron_initialise( data_specification_get_region(NEURON_PARAMS_REGION, address), recording_flags, &n_neurons, &incoming_spike_buffer_size)) { return false; } // Set up the synapses input_t *input_buffers; uint32_t *ring_buffer_to_input_buffer_left_shifts; if (!synapses_initialise( data_specification_get_region(SYNAPSE_PARAMS_REGION, address), n_neurons, &input_buffers, &ring_buffer_to_input_buffer_left_shifts)) { return false; } neuron_set_input_buffers(input_buffers); // Set up the population table uint32_t row_max_n_words; if (!population_table_initialise( data_specification_get_region(POPULATION_TABLE_REGION, address), data_specification_get_region(SYNAPTIC_MATRIX_REGION, address), &row_max_n_words)) { return false; } // Set up the synapse dynamics if (!synapse_dynamics_initialise( data_specification_get_region(SYNAPSE_DYNAMICS_REGION, address), n_neurons, ring_buffer_to_input_buffer_left_shifts)) { return false; } if (!spike_processing_initialise( row_max_n_words, MC, SDP_AND_DMA_AND_USER, SDP_AND_DMA_AND_USER, incoming_spike_buffer_size)) { return false; } log_info("Initialise: finished"); return true; }