协程对外抛异常
This commit is contained in:
@@ -18,12 +18,9 @@
|
||||
#include "Core/Shared_Memory/Shared_Memory.h"
|
||||
#include "Core/system/export.h"
|
||||
#include "Core/spdlog/export.h"
|
||||
|
||||
#include "Core/Base/SM_RingBuffer.h"
|
||||
#include "Dll_Global.h"
|
||||
#include <string_view>
|
||||
|
||||
|
||||
std::vector<std::string> ddd = {
|
||||
"1A 33 1A 1A F1 DA 08 2A 73 60 8D 78 12 0A EA 28 88 64 25 3C 08 33 22 41",
|
||||
"1A 33 1A 1A F1 D9 13 EA E7 11 8D 78 1D 40 58 BF 41 E2 45 49 09 7B C8 24",
|
||||
@@ -41,8 +38,6 @@ std::vector<std::string> ddd = {
|
||||
"1A 33 1A 1A F1 DF AF 71 5F 6C A0 00 0E 3E A8 7A 23 26 E1 0C 22 4E D9 88",
|
||||
"1A 33 1A 1A F1 E2 0A DD 76 2A A0 00 11 B1 B5 E8 00 30 AA 00 00 D5 D0 A3",
|
||||
};
|
||||
|
||||
|
||||
std::string get_absb() {
|
||||
static size_t index = 0; // 静态变量用于保存当前读取位置
|
||||
index++;
|
||||
@@ -51,89 +46,74 @@ std::string get_absb() {
|
||||
}
|
||||
return ddd[index];
|
||||
}
|
||||
|
||||
class TextLineReader {
|
||||
public:
|
||||
explicit TextLineReader(std::string_view file_path) {
|
||||
load(file_path);
|
||||
}
|
||||
|
||||
// 每调用一次,返回一行
|
||||
// 返回 true 表示成功取到一行
|
||||
// 返回 false 表示已经没有更多行
|
||||
bool get(std::string &ret_line) {
|
||||
bool get(std::string& ret_line) {
|
||||
if (index_ >= lines_.size()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ret_line = lines_[index_];
|
||||
++index_;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 重新从第一行开始读
|
||||
void reset() {
|
||||
index_ = 0;
|
||||
}
|
||||
|
||||
// 总行数
|
||||
std::size_t size() const {
|
||||
return lines_.size();
|
||||
}
|
||||
|
||||
// 是否已经读完
|
||||
bool empty() const {
|
||||
return lines_.empty();
|
||||
}
|
||||
|
||||
private:
|
||||
void load(std::string_view file_path) {
|
||||
std::ifstream file{std::string(file_path)};
|
||||
// std::cout << "抛出异常" << std::endl;
|
||||
// throw std::runtime_error("222");
|
||||
if (!file.is_open()) {
|
||||
auto err = "Failed to open file: " + std::string(file_path);
|
||||
std::cout << err << std::endl;
|
||||
std::exit(895);
|
||||
throw std::runtime_error(err);
|
||||
}
|
||||
|
||||
std::string line;
|
||||
while (std::getline(file, line)) {
|
||||
lines_.push_back(line);
|
||||
}
|
||||
|
||||
index_ = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<std::string> lines_;
|
||||
std::size_t index_ = 0;
|
||||
};
|
||||
|
||||
|
||||
std::size_t adsb_read(char *buf, std::size_t len) {
|
||||
std::size_t adsb_read(char* buf, std::size_t len) {
|
||||
static TextLineReader reader(get_exe_dir() + "/ADS-B_195_0205.txt");
|
||||
std::string line;
|
||||
reader.get(line);
|
||||
auto l = line.size();
|
||||
std::memcpy(buf, line.c_str(), l);
|
||||
|
||||
/*static Frequency_Limit fl;
|
||||
if (fl.test()) {
|
||||
std::cout << "adsb_read" << VAR_STR_2(l, len) << std::endl;
|
||||
}*/
|
||||
return l;
|
||||
}
|
||||
|
||||
int adsb_set_iq_cbk(iq_cbk_t recv_cbk, void *pusr) {
|
||||
int adsb_set_iq_cbk(iq_cbk_t recv_cbk, void* pusr) {
|
||||
auto dg = Dll_Global::instance();
|
||||
dg->recv_cbk = recv_cbk;
|
||||
dg->puser = pusr;
|
||||
|
||||
|
||||
dg->init_when_dll();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adsb_set_less_30Mhz_ddc_param(uint64_t cf_hz, uint64_t sf_hz, uint64_t bw_hz, int8_t sw) {
|
||||
auto dg = Dll_Global::instance();
|
||||
dg->center_freq = cf_hz;
|
||||
@@ -141,41 +121,33 @@ int adsb_set_less_30Mhz_ddc_param(uint64_t cf_hz, uint64_t sf_hz, uint64_t bw_hz
|
||||
dg->band_width = bw_hz;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adsb_set_less_30Mhz_fft_param(uint64_t fftWin, uint64_t fftLen, int fftPeriod_ms, int8_t sw) {
|
||||
auto dg = Dll_Global::instance();
|
||||
dg->fft_point_number = fftLen;
|
||||
dg->fft_period_ms = fftPeriod_ms;
|
||||
dg->fft_win_type = (UHD_FFTWin) fftWin;
|
||||
dg->fft_win_type = (UHD_FFTWin)fftWin;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
init_signal_config();
|
||||
auto dg = Dll_Global::instance();
|
||||
|
||||
|
||||
dg->init_when_exe();
|
||||
bool debug = false;
|
||||
|
||||
auto mb = get_system_memory() / (1024 * 1024);
|
||||
auto gb = mb / (1024);
|
||||
std::cout << "当前系统的物理内存大小" << mb << " MB" << std::endl;
|
||||
std::cout << "当前系统的物理内存大小" << gb << " GB" << std::endl;
|
||||
|
||||
dg->dtm.test_and_start_thread("dsp共享内存数据推送", [dg](std::atomic<bool> &running) {
|
||||
dg->dtm.test_and_start_thread("dsp共享内存数据推送", [dg](std::atomic<bool>& running) {
|
||||
bool debug = true;
|
||||
while (running) {
|
||||
auto list = dg->iq_memory_buffer.get_all();
|
||||
// 释放内存池
|
||||
Pool_Guard pg(&dg->iq_memory_buffer.pool, list);
|
||||
|
||||
if (debug && list.size() > 1000) {
|
||||
static Frequency_Limit fl(1.0 / 60.0);
|
||||
std::ostringstream oss;
|
||||
oss << get_current_millisecond_timestamp() << " 警告: dsp共享内存数据推送数据过多 当前数据队列长度:" << list.size() <<
|
||||
std::endl;
|
||||
std::endl;
|
||||
if (fl.test()) {
|
||||
std::cout << oss.str() << std::endl;
|
||||
}
|
||||
@@ -189,7 +161,6 @@ int main() {
|
||||
if (fl.test()) {
|
||||
std::cout << dg->rb->state_str() << " dsp数据推送" << frame_number << "条" << std::endl;
|
||||
}
|
||||
|
||||
for (int i = 0; i < frame_number; i++) {
|
||||
auto buf = list[i];
|
||||
dg->handle_2112(buf->data());
|
||||
|
||||
Reference in New Issue
Block a user