From 16a3ba134565c9401be2b49de7e7e0c51db8316d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 6 Jul 2021 18:17:32 +0200 Subject: [PATCH] found issue root --- README.md | 18 ++++++++++++--- bsp_q7s/boardtest/Q7STestTask.cpp | 37 ++++++++++++++++++++++++++---- bsp_q7s/boardtest/Q7STestTask.h | 1 + doc/img/ProcessSettings.png | Bin 0 -> 18799 bytes 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 doc/img/ProcessSettings.png diff --git a/README.md b/README.md index 63d00b19..9391d883 100644 --- a/README.md +++ b/README.md @@ -576,7 +576,7 @@ When using Eclipse, there are two special build variables in the project propert the sysroot path in those variables to get any additional includes like `gpiod.h` in the Eclipse indexer. -# Q7S Utilities +# Q7S Utilities and Troubleshooting ## Creating files with cat and echo @@ -591,6 +591,17 @@ cat /tmp/test.txt For more useful combinations, see this [link](https://www.freecodecamp.org/news/the-cat-command-in-linux-how-to-create-a-text-file-with-cat-or-touch/). +## Using `system` when debugging + +Please note that when using a `system` call in C++/C code and debugging, a new thread will be +spawned which will appear on the left in Eclipse or Xilinx SDK as a `sh` program. +The debugger might attach to this child process automatically, depending on debugger configuration, +and the process needs to be selected and continued/started manually. You can enable or disable +this behaviour by selecting or deselecting the `Attach Process Children` option in the Remote +Application Configuration for the TCF plugin like shown in the following picture + +
+ ## Libgpiod Detect all gpio device files: @@ -666,9 +677,10 @@ candump can0 ## Useful Q7S Linux Commands Rebooting currently running image: -```` + +```sh xsc_boot_copy -r -```` +``` # Running the EIVE OBSW on a Raspberry Pi diff --git a/bsp_q7s/boardtest/Q7STestTask.cpp b/bsp_q7s/boardtest/Q7STestTask.cpp index 55aa7657..6d9964c5 100644 --- a/bsp_q7s/boardtest/Q7STestTask.cpp +++ b/bsp_q7s/boardtest/Q7STestTask.cpp @@ -1,6 +1,8 @@ #include "Q7STestTask.h" + #include "fsfw/timemanager/Stopwatch.h" #include "fsfw/tasks/TaskFactory.h" + #include #include #include @@ -16,10 +18,27 @@ ReturnValue_t Q7STestTask::performOneShotAction() { void Q7STestTask::sdCardTests() { using namespace std; Stopwatch stopwatch; - ofstream testFile("/tmp/test.txt"); - testFile << "Hallo Welt" << endl; - testFile.close(); - //FILE* testFile = popen("q7hw sd info all", "r"); + int result = std::system("q7hw sd info all > /tmp/sd_status.txt"); + if(result != 0) { + sif::debug << "system call failed with " << result << endl; + } + ifstream sdStatus("/tmp/sd_status.txt"); + string line; + uint8_t idx = 0; + while (std::getline(sdStatus, line)) { + std::istringstream iss(line); + string word; + while(iss >> word) { + if(word == "on") { + sif::info << "SD card " << static_cast(idx) << " is on" << endl; + } + else if(word == "off") { + sif::info << "SD card " << static_cast(idx) << " is off" << endl; + } + } + idx++; + } + std::remove("/tmp/sd_status.txt"); //TaskFactory::delayTask(3000); //int result = system(); //std::fstream fs(testFile); @@ -43,3 +62,13 @@ void Q7STestTask::sdCardTests() { // system("q7hw sd set 0 off > /tmp/sd_set.txt"); // stopwatch.stop(true); } + +void Q7STestTask::fileTests() { + using namespace std; + ofstream testFile("/tmp/test.txt"); + testFile << "Hallo Welt" << endl; + testFile.close(); + + system("echo \"Hallo Welt\" > /tmp/test2.txt"); + system("echo \"Hallo Welt\""); +} diff --git a/bsp_q7s/boardtest/Q7STestTask.h b/bsp_q7s/boardtest/Q7STestTask.h index 4b1aea7e..7056853e 100644 --- a/bsp_q7s/boardtest/Q7STestTask.h +++ b/bsp_q7s/boardtest/Q7STestTask.h @@ -10,6 +10,7 @@ private: ReturnValue_t performOneShotAction() override; void sdCardTests(); + void fileTests(); }; diff --git a/doc/img/ProcessSettings.png b/doc/img/ProcessSettings.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8c3c99bed92f4fc72ca5a24d5aee8fde983644 GIT binary patch literal 18799 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 P00000NkvXXu0mjfS!1RE literal 0 HcmV?d00001