fixed bug continuous mode
This commit is contained in:
parent
776ffd5bd2
commit
b2c0bc43fe
3 changed files with 16 additions and 9 deletions
|
@ -77,13 +77,20 @@ void SampleRing::CommandPass(const unsigned int cmd) {
|
|||
|
||||
void SampleRing::write(DATA_BLOCK const * data) {
|
||||
if (m_finished) return;
|
||||
/** BUG : Tady je problém - tato funkce běží pod přerušením s vyšší prioritou,
|
||||
/** Tady je problém - tato funkce běží pod přerušením s vyšší prioritou,
|
||||
* takže m_mode se během tt. funkce změnit nemůže. Z toho vyplývá, že se
|
||||
* odeslání dat musí vykonat a nelze tedy změnit m_mode dokud se data
|
||||
* meodešlou do ring_buffer všechna. Tedy to funguje, pokud je TRIGER_MODE_AUTO.
|
||||
* Kde zde vzít informaci, že se m_mode nějak změnilo a nějak jí použít
|
||||
* zatím nevím, nejjednodušší je nechat to být a přenést do software.
|
||||
* meodešlou do ring_buffer všechna.
|
||||
* */
|
||||
if (m_mode != o_mode) { // bug fix
|
||||
if (m_mode == TIME_BASE_CONTINUOUS) { // Při změně na kontinuální provoz
|
||||
m_lenght = RING_LEN; // odešli celý ring_buffer.
|
||||
m_tail = m_head; // Není to ideální, ale funguje to.
|
||||
m_finished = true; // Příkaz k odeslání to odstartuje.
|
||||
}
|
||||
o_mode = m_mode;
|
||||
return;
|
||||
}
|
||||
unsigned t_head = m_head; // dočasné proměnné kvůli zrychlení
|
||||
unsigned t_lenght = m_lenght; // následujícího cyklu
|
||||
if (m_mode == TIME_BASE_TRIGERED) {
|
||||
|
|
|
@ -25,7 +25,7 @@ class SampleRing : public BaseLayer {
|
|||
bool m_old_triger;
|
||||
bool m_trigered;
|
||||
volatile bool m_finished;
|
||||
TIME_BASE_MODE m_mode; //, o_mode;
|
||||
TIME_BASE_MODE m_mode, o_mode;
|
||||
|
||||
[[gnu::aligned(4)]]char rcvd_buffer [RCVD_BUFLEN];
|
||||
unsigned rcvd_counter;
|
||||
|
@ -33,7 +33,7 @@ class SampleRing : public BaseLayer {
|
|||
public:
|
||||
explicit SampleRing () noexcept : BaseLayer(), m_settings(), m_head(0), m_tail(0), m_lenght(0),
|
||||
m_old_triger(false), m_trigered(false), m_finished(false),
|
||||
m_mode (TIME_BASE_TRIGERED), // o_mode (TIME_BASE_TRIGERED),
|
||||
m_mode (TIME_BASE_TRIGERED), o_mode (TIME_BASE_TRIGERED),
|
||||
rcvd_counter(0u), rcvd_status (RCVD_IDLE) {};
|
||||
uint32_t Up (const char * data, const uint32_t len) override;
|
||||
void write (DATA_BLOCK const * data);
|
||||
|
|
|
@ -79,10 +79,10 @@ void MainWindow::TriggerValues (int n) {
|
|||
void MainWindow::SendTrigerMode (int n) {
|
||||
if (n == TRIGER_MODE_SINGLE) ui->buttonStart->setEnabled(true);
|
||||
else ui->buttonStart->setEnabled(false);
|
||||
|
||||
/*
|
||||
if (n == TRIGER_MODE_AUTO) ui->comboTimeRange->setEnabled(true); // BUG - jinak dojde při přepínání k chybě
|
||||
else ui->comboTimeRange->setEnabled(false); // TODO
|
||||
|
||||
else ui->comboTimeRange->setEnabled(false); // fixed
|
||||
*/
|
||||
firmware.SendTrigerMode(n);
|
||||
}
|
||||
void MainWindow::SendTrigerEdge (int n) {
|
||||
|
|
Loading…
Reference in a new issue