久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么添加新的CAN卡

共計(jì) 3060 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

這篇文章主要介紹怎么添加新的 CAN 卡,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

簡(jiǎn)介

控制器區(qū)域網(wǎng)絡(luò)(CAN)是在許多微控制器和設(shè)備中密集使用的網(wǎng)絡(luò),用于在沒(méi)有主計(jì)算機(jī)幫助的情況下在設(shè)備之間傳輸數(shù)據(jù)。

Apollo 中使用的默認(rèn) CAN 卡是  ESD CAN-PCIe 卡。您可以使用以下步驟添加新的 CAN 卡:

添加新的 CAN 卡

添加新的 CAN 卡需要完成以下幾個(gè)步驟:

實(shí)現(xiàn)新 CAN 卡的 CanClient 類(lèi)。

在 CanClientFactory 中注冊(cè)新的 CAN 卡。

更新配置文件。

以下步驟展示了如何添加新的 CAN 卡 – 示例添加 CAN 卡到您的工程。

步驟 1

實(shí)現(xiàn)新 CAN 卡的 CanClient 類(lèi),下面的代碼展示了如何實(shí)現(xiàn)  CANClient  類(lèi):

#include  string 
#include  vector 
#include  hermes_can/include/bcan.h 
#include  modules/canbus/can_client/can_client.h 
#include  modules/canbus/common/canbus_consts.h 
#include  modules/common/proto/error_code.pb.h 
 * @namespace apollo::canbus::can
 * @brief apollo::canbus::can
 */
namespace apollo {
namespace canbus {
namespace can {
 * @class ExampleCanClient
 * @brief The class which defines a Example CAN client which inherits CanClient.
 */
class ExampleCanClient : public CanClient {
 public:
 /**
 * @brief Initialize the Example CAN client by specified CAN card parameters.
 * @param parameter CAN card parameters to initialize the CAN client.
 * @return If the initialization is successful.
 */
 bool Init(const CANCardParameter  parameter) override;
 /**
 * @brief Destructor
 */
 virtual ~ExampleCanClient() = default;
 /**
 * @brief Start the Example CAN client.
 * @return The status of the start action which is defined by
 * apollo::common::ErrorCode.
 */
 apollo::common::ErrorCode Start() override;
 /**
 * @brief Stop the Example CAN client.
 */
 void Stop() override;
 /**
 * @brief Send messages
 * @param frames The messages to send.
 * @param frame_num The amount of messages to send.
 * @return The status of the sending action which is defined by
 * apollo::common::ErrorCode.
 */
 apollo::common::ErrorCode Send(const std::vector CanFrame  frames,
 int32_t* const frame_num) override;
 /**
 * @brief Receive messages
 * @param frames The messages to receive.
 * @param frame_num The amount of messages to receive.
 * @return The status of the receiving action which is defined by
 * apollo::common::ErrorCode.
 */
 apollo::common::ErrorCode Receive(std::vector CanFrame * const frames,
 int32_t* const frame_num) override;
 /**
 * @brief Get the error string.
 * @param status The status to get the error string.
 */
 std::string GetErrorString(const int32_t status) override;
 private:
 ...
 ...
} // namespace can
} // namespace canbus
} // namespace apollo

步驟 2

在 CanClientFactory 中注冊(cè)新 CAN 卡,在  CanClientFactory 中添加如下代碼:

void CanClientFactory::RegisterCanClients() { 
 Register(CANCardParameter::ESD_CAN, 
 []() -  CanClient* { return new can::EsdCanClient(); }); 
 
 // register the new CAN card here. 
 Register(CANCardParameter::EXAMPLE_CAN, 
 []() -  CanClient* { return new can::ExampleCanClient(); }); 
}

步驟 3

接下來(lái),需要更新配置文件 在 /modules/canbus/proto/can_card_parameter.proto 添加 EXAMPLE_CAN;

message CANCardParameter {
 enum CANCardBrand {
 FAKE_CAN = 0;
 ESD_CAN = 1;
 EXAMPLE_CAN = 2; // add new CAN card here.
 }
 ... ... 
}

Update /modules/canbus/conf/canbus_conf.pb.txt

can_card_parameter {
 brand:EXAMPLE_CAN
 type: PCI_CARD // suppose the new can card is PCI_CARD
 channel_id: CHANNEL_ID_ZERO // suppose the new can card has CHANNEL_ID_ZERO
... ...

以上是“怎么添加新的 CAN 卡”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)3060字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 波密县| 马尔康县| 红桥区| 朔州市| 镇雄县| 汾阳市| 社旗县| 延长县| 湟源县| 临泽县| 东宁县| 旬邑县| 贵港市| 江陵县| 阿拉善盟| 安塞县| 崇义县| 武邑县| 县级市| 马鞍山市| 浪卡子县| 文成县| 英超| 卢氏县| 通江县| 怀安县| 张家港市| 大英县| 岚皋县| 苗栗市| 金平| 唐海县| 富裕县| 上高县| 辽中县| 青龙| 绵竹市| 高密市| 交口县| 贡觉县| 新邵县|