Boost库中的std::pair结构体及其与宏BOOST_TEST_EQ的相关测试

Boost库的std::pair与BOOST_TEST_EQ测试实践
152 篇文章 ¥59.90 ¥99.00
本文探讨了Boost库中的std::pair结构体在打包返回值中的应用,以及如何利用宏BOOST_TEST_EQ进行测试。通过一个实例展示了如何使用std::pair创建返回两个值的函数,并利用BOOST_TEST_EQ进行断言检查,强调了测试在软件开发中的重要性。

Boost库中的std::pair结构体及其与宏BOOST_TEST_EQ的相关测试

在软件开发中,测试是非常重要的一个环节。Boost库提供了丰富的测试工具和框架来帮助我们进行测试。本篇文章将介绍如何使用Boost库中的std::pair结构体及其与宏BOOST_TEST_EQ的相关测试。

首先,我们需要了解一下std::pair结构体的用途。std::pair结构体是一个模板类,可以表示一对值,其中第一个值的类型是T1,第二个值的类型是T2。这个结构体在STL中广泛使用,可以用于将两个不同类型的值打包成一个对象,进行传递和返回。

接下来,我们将使用std::pair结构体来完成一个简单的例子。假设我们要实现一个函数,该函数接受两个整型参数,返回这两个整数的和以及积。我们可以使用std::pair结构体来打包这两个返回值,代码如下:

#include <utility>

std::pair<int, int> add_and_multiply(int a, int b) {
  return std::make_pair(a + b, a * b);
}

上面的代码中,std::make_pair函数创建了一个std::pair对象,并返回其副本,其中第一个值是a+b,第二个值是a*b。我们可以通过访问std::pair对象的first和second成员来获取这两个值,例如:

std::pair<int, int> result = add_and_multiply(2, 3);
int sum = result.first;
int product = result.second;
-------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 ModbusTCPClient::connect() conn-000-addr=192.168.1.27;_running=0 2025-10-03 10:43:29.019 [24138] LOG_DEBUG modbus_tcp connect 192.168.1.27:502 start... 2025-10-03 10:43:29.020 [24138] LOG_INFO modbus_tcp serveraddr is ip format -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 2025-10-03 10:43:29.238 [24140] LOG_DEBUG 192.168.1.27:502: tcp connect suc: 2025-10-03 10:43:29.238 [24140] LOG_INFO 192.168.1.27:502: tcp start rec data -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 ModbusTCPClient::connect() conn-000-addr=192.168.1.27;ret=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 ModbusTCPClient::connect() conn-111-addr=192.168.1.27;_process_thread=1 [2025-10-03 10:43:30] ModbusTCPInput::start conn_status: 3;collect_status:2;_running:1;_poll_thread:1 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 MQTT connecting -222- to tcp://192.168.1.27:1883 with _connected 0 -------------------------------------- Failed to start output processor -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 MQTT connecting -222- to tcp://192.168.1.27:1883 with _connected 0 Failed to start output processor GatewayManager::start()00: 1 Gateway manager started. Press Ctrl+C or Ctrl+Z to stop. -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 [2025-10-03 10:43:32] Initialized upload,logs and download directories [2025-10-03 10:43:32] Server started on port :8082 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 get- pathMoudle: collectconn collectconn:in Database opened: ./jcdz-db.db -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=1 ----------id=1;address=2 ---------id=1;value=0 --input.id=1;data_point.size()=1 ====================================== SQL sql=:SELECT CollectConnNO, Name,ConnType,ProtocolType, Path,DnsIP,Port,Timeout,Memo,ConnStatus,ConnTime,CollectStatus,CollectTime,ChanCount,ComName,ComBaudRate,ComParityCheck,ComStopBit,RegDevName,RegDevId,RegMode,RegFactType,RegFactChan,RegFactNO FROM IOT_CollectConn_info; -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 [2025-10-03 10:43:35] GET /api/collectconn - Status: 200 - Remote: 192.168.20.27:61079 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 -------------------------------------- -------data_points.size()=1 ModbusTCPInput::pollData() conn-id=1;dp.id=1;elapsed=0 get- pathMoudle: collectconn collectconn:in stop ----: conn [2025-10-03 10:43:36] ModbusTCPInput::stop conn_status: 0;collect_status:5;_running:1;_poll_thread:1 ==24138== Thread 14: ==24138== Conditional jump or move depends on uninitialised value(s) ==24138== at 0x25B4A3: JCNetopTcpclient::Stop() (JCNetopTcpclient.cpp:293) ==24138== by 0x2466FF: ModbusTCPClient::disconnect() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x162DC3: ModbusTCPInput::stop() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x168BF7: GatewayManager::stopInputProcessors(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1B1868: CollectConn::get[abi:cxx11](httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x18F56A: handle_get(httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x2145B0: void std::__invoke_impl<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(std::__invoke_other, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x206BBE: std::enable_if<std::__and_<std::is_void<void>, std::__is_invocable<void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&> >::value, void>::type std::__invoke_r<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F38D2: std::_Function_handler<void (httplib::Request const&, httplib::Response&), void (*)(httplib::Request const&, httplib::Response&)>::_M_invoke(std::_Any_data const&, httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1DF3FA: std::function<void (httplib::Request const&, httplib::Response&)>::operator()(httplib::Request const&, httplib::Response&) const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A18B8: httplib::Server::dispatch_request(httplib::Request&, httplib::Response&, std::vector<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> >, std::allocator<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> > > > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A15AA: httplib::Server::routing(httplib::Request&, httplib::Response&, httplib::Stream&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== Uninitialised value was created by a heap allocation ==24138== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x24608E: ModbusTCPClient::ModbusTCPClient(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x16249E: ModbusTCPInput::ModbusTCPInput(InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x183FC0: void __gnu_cxx::new_allocator<ModbusTCPInput>::construct<ModbusTCPInput, InputConfig&>(ModbusTCPInput*, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x182F5D: void std::allocator_traits<std::allocator<ModbusTCPInput> >::construct<ModbusTCPInput, InputConfig&>(std::allocator<ModbusTCPInput>&, ModbusTCPInput*, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1817A7: std::_Sp_counted_ptr_inplace<ModbusTCPInput, std::allocator<ModbusTCPInput>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<InputConfig&>(std::allocator<ModbusTCPInput>, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x17F945: std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<ModbusTCPInput, std::allocator<ModbusTCPInput>, InputConfig&>(ModbusTCPInput*&, std::_Sp_alloc_shared_tag<std::allocator<ModbusTCPInput> >, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x17DD45: std::__shared_ptr<ModbusTCPInput, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<ModbusTCPInput>, InputConfig&>(std::_Sp_alloc_shared_tag<std::allocator<ModbusTCPInput> >, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x17BA86: std::shared_ptr<ModbusTCPInput>::shared_ptr<std::allocator<ModbusTCPInput>, InputConfig&>(std::_Sp_alloc_shared_tag<std::allocator<ModbusTCPInput> >, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x178230: std::shared_ptr<ModbusTCPInput> std::allocate_shared<ModbusTCPInput, std::allocator<ModbusTCPInput>, InputConfig&>(std::allocator<ModbusTCPInput> const&, InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x174553: std::shared_ptr<ModbusTCPInput> std::make_shared<ModbusTCPInput, InputConfig&>(InputConfig&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x169B98: GatewayManager::createProcessors(std::vector<GatewayConfig, std::allocator<GatewayConfig> >&, bool) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== Invalid read of size 8 ==24138== at 0x145344: std::vector<GatewayConfig, std::allocator<GatewayConfig> >::size() const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x174BED: std::vector<GatewayConfig, std::allocator<GatewayConfig> >::vector(std::vector<GatewayConfig, std::allocator<GatewayConfig> > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x16A073: GatewayManager::getGateways() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x168C18: GatewayManager::stopInputProcessors(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1B1868: CollectConn::get[abi:cxx11](httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x18F56A: handle_get(httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x2145B0: void std::__invoke_impl<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(std::__invoke_other, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x206BBE: std::enable_if<std::__and_<std::is_void<void>, std::__is_invocable<void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&> >::value, void>::type std::__invoke_r<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F38D2: std::_Function_handler<void (httplib::Request const&, httplib::Response&), void (*)(httplib::Request const&, httplib::Response&)>::_M_invoke(std::_Any_data const&, httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1DF3FA: std::function<void (httplib::Request const&, httplib::Response&)>::operator()(httplib::Request const&, httplib::Response&) const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A18B8: httplib::Server::dispatch_request(httplib::Request&, httplib::Response&, std::vector<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> >, std::allocator<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> > > > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A15AA: httplib::Server::routing(httplib::Request&, httplib::Response&, httplib::Stream&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== Address 0xa0 is not stack'd, malloc'd or (recently) free'd ==24138== ==24138== ==24138== Process terminating with default action of signal 11 (SIGSEGV): dumping core ==24138== Access not within mapped region at address 0xA0 ==24138== at 0x145344: std::vector<GatewayConfig, std::allocator<GatewayConfig> >::size() const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x174BED: std::vector<GatewayConfig, std::allocator<GatewayConfig> >::vector(std::vector<GatewayConfig, std::allocator<GatewayConfig> > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x16A073: GatewayManager::getGateways() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x168C18: GatewayManager::stopInputProcessors(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1B1868: CollectConn::get[abi:cxx11](httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x18F56A: handle_get(httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x2145B0: void std::__invoke_impl<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(std::__invoke_other, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x206BBE: std::enable_if<std::__and_<std::is_void<void>, std::__is_invocable<void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&> >::value, void>::type std::__invoke_r<void, void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&>(void (*&)(httplib::Request const&, httplib::Response&), httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F38D2: std::_Function_handler<void (httplib::Request const&, httplib::Response&), void (*)(httplib::Request const&, httplib::Response&)>::_M_invoke(std::_Any_data const&, httplib::Request const&, httplib::Response&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1DF3FA: std::function<void (httplib::Request const&, httplib::Response&)>::operator()(httplib::Request const&, httplib::Response&) const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A18B8: httplib::Server::dispatch_request(httplib::Request&, httplib::Response&, std::vector<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> >, std::allocator<std::pair<boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >, std::function<void (httplib::Request const&, httplib::Response&)> > > > const&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1A15AA: httplib::Server::routing(httplib::Request&, httplib::Response&, httplib::Stream&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== If you believe this happened as a result of a stack ==24138== overflow in your program's main thread (unlikely but ==24138== possible), you can try to increase the size of the ==24138== main thread stack using the --main-stacksize= flag. ==24138== The main thread stack size used in this run was 8388608. ==24138== ==24138== HEAP SUMMARY: ==24138== in use at exit: 485,052 bytes in 1,234 blocks ==24138== total heap usage: 3,183 allocs, 1,949 frees, 799,663 bytes allocated ==24138== ==24138== Thread 1: ==24138== 304 bytes in 1 blocks are possibly lost in loss record 403 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x26BC48: zsummer::log4z::ThreadHelper::start() (log4z.cpp:1145) ==24138== by 0x26D5CE: zsummer::log4z::LogerManager::start() (log4z.cpp:1490) ==24138== by 0x268BF0: JCCommuLib::JCCommuLib() (JCCommuLib.cpp:34) ==24138== by 0x268ECB: JCCommuLib::getInstance() (JCCommuLib.cpp:67) ==24138== by 0x19142B: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 304 bytes in 1 blocks are possibly lost in loss record 404 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x2697F3: std::thread::thread<void (JCCommuLib::*)(), JCCommuLib*, void>(void (JCCommuLib::*&&)(), JCCommuLib*&&) (std_thread.h:143) ==24138== by 0x26950A: JCCommuLib::Run() (JCCommuLib.cpp:106) ==24138== by 0x191455: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 304 bytes in 1 blocks are possibly lost in loss record 405 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4AD526D: Paho_thread_start (in /usr/local/lib/libpaho-mqtt3a.so.1.3.15) ==24138== by 0x4AB8F14: MQTTAsync_connect (in /usr/local/lib/libpaho-mqtt3a.so.1.3.15) ==24138== by 0x24FCAF: MQTTClientWrapper::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x167AB5: MQTTOutput::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1683DE: GatewayManager::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x191529: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 304 bytes in 1 blocks are possibly lost in loss record 406 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4AD526D: Paho_thread_start (in /usr/local/lib/libpaho-mqtt3a.so.1.3.15) ==24138== by 0x4AB8F4A: MQTTAsync_connect (in /usr/local/lib/libpaho-mqtt3a.so.1.3.15) ==24138== by 0x24FCAF: MQTTClientWrapper::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x167AB5: MQTTOutput::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1683DE: GatewayManager::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x191529: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 304 bytes in 1 blocks are possibly lost in loss record 407 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x173E3D: std::thread::thread<void (GatewayManager::*)(), GatewayManager*, void>(void (GatewayManager::*&&)(), GatewayManager*&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1684B0: GatewayManager::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x191529: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 608 bytes in 2 blocks are possibly lost in loss record 472 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x17202D: std::thread::thread<void (ModbusTCPInput::*)(), ModbusTCPInput*, void>(void (ModbusTCPInput::*&&)(), ModbusTCPInput*&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x162682: ModbusTCPInput::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x168330: GatewayManager::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x191529: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 608 bytes in 2 blocks are possibly lost in loss record 473 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x24731D: std::thread::thread<void (ModbusTCPClient::*)(), ModbusTCPClient*, void>(void (ModbusTCPClient::*&&)(), ModbusTCPClient*&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x2464FE: ModbusTCPClient::connect() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1626C9: ModbusTCPInput::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x168330: GatewayManager::start() (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x191529: main (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 1,520 bytes in 5 blocks are possibly lost in loss record 544 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x206F09: std::thread::thread<httplib::ThreadPool::worker, , void>(httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F3D40: void __gnu_cxx::new_allocator<std::thread>::construct<std::thread, httplib::ThreadPool::worker>(std::thread*, httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1E8DAE: void std::allocator_traits<std::allocator<std::thread> >::construct<std::thread, httplib::ThreadPool::worker>(std::allocator<std::thread>&, std::thread*, httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1E8EC9: void std::vector<std::thread, std::allocator<std::thread> >::_M_realloc_insert<httplib::ThreadPool::worker>(__gnu_cxx::__normal_iterator<std::thread*, std::vector<std::thread, std::allocator<std::thread> > >, httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1DB9FD: void std::vector<std::thread, std::allocator<std::thread> >::emplace_back<httplib::ThreadPool::worker>(httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1968F9: httplib::ThreadPool::ThreadPool(unsigned long) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x19DB2D: httplib::Server::Server()::{lambda()#1}::operator()() const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x208603: httplib::ThreadPool* std::__invoke_impl<httplib::ThreadPool*, httplib::Server::Server()::{lambda()#1}&>(std::__invoke_other, httplib::Server::Server()::{lambda()#1}&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== 3,040 bytes in 10 blocks are possibly lost in loss record 549 of 561 ==24138== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==24138== by 0x40147D9: calloc (rtld-malloc.h:44) ==24138== by 0x40147D9: allocate_dtv (dl-tls.c:375) ==24138== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) ==24138== by 0x4E657B4: allocate_stack (allocatestack.c:430) ==24138== by 0x4E657B4: pthread_create@@GLIBC_2.34 (pthread_create.c:647) ==24138== by 0x4C5E328: std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30) ==24138== by 0x206F09: std::thread::thread<httplib::ThreadPool::worker, , void>(httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F3D40: void __gnu_cxx::new_allocator<std::thread>::construct<std::thread, httplib::ThreadPool::worker>(std::thread*, httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1E8DAE: void std::allocator_traits<std::allocator<std::thread> >::construct<std::thread, httplib::ThreadPool::worker>(std::allocator<std::thread>&, std::thread*, httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1DB9B7: void std::vector<std::thread, std::allocator<std::thread> >::emplace_back<httplib::ThreadPool::worker>(httplib::ThreadPool::worker&&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1968F9: httplib::ThreadPool::ThreadPool(unsigned long) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x19DB2D: httplib::Server::Server()::{lambda()#1}::operator()() const (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x208603: httplib::ThreadPool* std::__invoke_impl<httplib::ThreadPool*, httplib::Server::Server()::{lambda()#1}&>(std::__invoke_other, httplib::Server::Server()::{lambda()#1}&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== by 0x1F6A4D: std::enable_if<std::__and_<std::__not_<std::is_void<httplib::TaskQueue*> >, std::is_convertible<std::__invoke_result<httplib::Server::Server()::{lambda()#1}&>::type, httplib::TaskQueue*> >::value, httplib::TaskQueue*>::type std::__invoke_r<httplib::TaskQueue*, httplib::Server::Server()::{lambda()#1}&>(httplib::Server::Server()::{lambda()#1}&) (in /home/sxp/shui/jcdzarm/webserver/main-new) ==24138== ==24138== LEAK SUMMARY: ==24138== definitely lost: 0 bytes in 0 blocks ==24138== indirectly lost: 0 bytes in 0 blocks ==24138== possibly lost: 7,296 bytes in 24 blocks ==24138== still reachable: 477,756 bytes in 1,210 blocks ==24138== of which reachable via heuristic: ==24138== length64 : 119,744 bytes in 438 blocks ==24138== suppressed: 0 bytes in 0 blocks ==24138== Reachable blocks (those to which a pointer was found) are not shown. ==24138== To see them, rerun with: --leak-check=full --show-leak-kinds=all ==24138== ==24138== For lists of detected and suppressed errors, rerun with: -s ==24138== ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0) Segmentation fault
10-04
基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值