canfd收不到数据_在AWR1642评估板上测试CAN-FD,能发送数据,不能接收数据

在AWR1642评估板上运行mmwave_automotive_toolbox_2_7_1\labs\lab0005_object_data_over_can例程,使用周立功的USB2CAN转换器和上位机软件,基于此例程测试CAN-FD发送和接收数据,能向上位机软件发送数据,但不能接收到上位机软件发送的数据。

软件代码如下:

/*CAN-FD发送接收测试主函数*/

int main (void)

{

Task_Params taskParams;

int32_t errCode;

SOC_Cfg socCfg;

/* Initialize the ESM: */

ESM_init(0U); //dont clear errors as TI RTOS does it

/* Initialize and populate the demo MCB */

memset ((void*)&gMmwMssMCB, 0, sizeof(MmwDemo_MCB));

/* Initialize the SOC confiugration: */

memset ((void *)&socCfg, 0, sizeof(SOC_Cfg));

/* Populate the SOC configuration: */

socCfg.clockCfg = SOC_SysClock_INIT;

/* Initialize the SOC Module: This is done as soon as the application is started

* to ensure that the MPU is correctly configured. */

gMmwMssMCB.socHandle = SOC_init (&socCfg, &errCode);

if (gMmwMssMCB.socHandle == NULL)

{

System_printf ("Error: SOC Module Initialization failed [Error code %d]\n", errCode);

return -1;

}

/* Initialize the DEMO configuration: */

gMmwMssMCB.cfg.sysClockFrequency = MSS_SYS_VCLK;

gMmwMssMCB.cfg.loggingBaudRate = 921600;

gMmwMssMCB.cfg.commandBaudRate = 115200;

/* Check if the SOC is a secure device */

if (SOC_isSecureDevice(gMmwMssMCB.socHandle, &errCode))

{

/* Disable firewall for JTAG and LOGGER (UART) which is needed by the demo */

SOC_controlSecureFirewall(gMmwMssMCB.socHandle,

(uint32_t)(SOC_SECURE_FIREWALL_JTAG | SOC_SECURE_FIREWALL_LOGGER),

SOC_SECURE_FIREWALL_DISABLE,

&errCode);

}

/* Debug Message: */

System_printf ("**********************************************\n");

System_printf ("Debug: Launching the Millimeter Wave Demo\n");

System_printf ("**********************************************\n");

/* Initialize the Task Parameters. */

// Task_Params_init(&taskParams);void MmwDemo_mssInitTask(void)

{

int32_t errCode;

MMWave_InitCfg initCfg;

UART_Params uartParams;

Task_Params taskParams;

Semaphore_Params semParams;

Mailbox_Config mboxCfg;

Error_Block eb;

/* Debug Message: */

System_printf("Debug: MMWDemoMSS Launched the Initialization Task\n");

/*****************************************************************************

* Initialize the mmWave SDK components:

*****************************************************************************/

/* Pinmux setting */

/* Setup the PINMUX to bring out the UART-1 */

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINN5_PADBE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINN5_PADBE, SOC_XWR16XX_PINN5_PADBE_MSS_UARTA_TX);

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINN4_PADBD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINN4_PADBD, SOC_XWR16XX_PINN4_PADBD_MSS_UARTA_RX);

/* Setup the PINMUX to bring out the UART-3 */

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINF14_PADAJ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINF14_PADAJ, SOC_XWR16XX_PINF14_PADAJ_MSS_UARTB_TX);

/* Setup the PINMUX to bring out the DSS UART */

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINP8_PADBM, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINP8_PADBM, SOC_XWR16XX_PINP8_PADBM_DSS_UART_TX);

Can_Initialize();CAN接口初始化

#if 1

/* Initialize the UART */

UART_init();

/* Initialize the GPIO */

GPIO_init();

/* Initialize the Mailbox */

Mailbox_init(MAILBOX_TYPE_MSS);

/*****************************************************************************

* Open & configure the drivers:

*****************************************************************************/

/* Setup the default UART Parameters */

UART_Params_init(&uartParams);

uartParams.clockFrequency = gMmwMssMCB.cfg.sysClockFrequency;

uartParams.baudRate = gMmwMssMCB.cfg.commandBaudRate;

uartParams.isPinMuxDone = 1U;

/* Open the UART Instance */

gMmwMssMCB.commandUartHandle = UART_open(0, &uartParams);

if (gMmwMssMCB.commandUartHandle == NULL)

{

System_printf("Error: MMWDemoMSS Unable to open the Command UART Instance\n");

return;

}

/* Setup the default UART Parameters */

UART_Params_init(&uartParams);

uartParams.writeDataMode = UART_DATA_BINARY;

uartParams.readDataMode = UART_DATA_BINARY;

uartParams.clockFrequency = gMmwMssMCB.cfg.sysClockFrequency;

uartParams.baudRate = gMmwMssMCB.cfg.loggingBaudRate;

uartParams.isPinMuxDone = 1U;

/* Open the Logging UART Instance: */

gMmwMssMCB.loggingUartHandle = UART_open(1, &uartParams);

if (gMmwMssMCB.loggingUartHandle == NULL)

{

System_printf("Error: MMWDemoMSS Unable to open the Logging UART Instance\n");

return;

}

/* Create a binary semaphore which is used to handle GPIO switch interrupt. */

Semaphore_Params_init(&semParams);

semParams.mode = Semaphore_Mode_BINARY;

gMmwMssMCB.gpioSemHandle = Semaphore_create(0, &semParams, NULL);

/*****************************************************************************

* Creating communication channel between MSS & DSS

*****************************************************************************/

/* Create a binary semaphore which is used to handle mailbox interrupt. */

Semaphore_Params_init(&semParams);

semParams.mode = Semaphore_Mode_BINARY;

gMmwMssMCB.mboxSemHandle = Semaphore_create(0, &semParams, NULL);

/* Setup the default mailbox configuration */

Mailbox_Config_init(&mboxCfg);

/* Setup the configuration: */

mboxCfg.chType = MAILBOX_CHTYPE_MULTI;

mboxCfg.chId = MAILBOX_CH_ID_0;

mboxCfg.writeMode = MAILBOX_MODE_BLOCKING;

mboxCfg.readMode = MAILBOX_MODE_CALLBACK;

mboxCfg.readCallback = &MmwDemo_mboxCallback;

/* Initialization of Mailbox Virtual Channel */

gMmwMssMCB.peerMailbox = Mailbox_open(MAILBOX_TYPE_DSS, &mboxCfg, &errCode);

if (gMmwMssMCB.peerMailbox == NULL)

{

/* Error: Unable to open the mailbox */

System_printf("Error: Unable to open the Mailbox to the DSS [Error code %d]\n", errCode);

return;

}

/* Create task to handle mailbox messges */

Task_Params_init(&taskParams);

taskParams.stackSize = 16*1024;

#endif

Task_create(MmwDemo_mboxReadTask, &taskParams, NULL);20191204 屏蔽掉从mailbox中发送数据

System_printf("WFZHED: MMWDemoMSS Initialization Task is OK\n");

// taskParams.priority = 3;

// taskParams.stackSize = 2*1024;

Task_create(MmwDemo_mssInitTask, &taskParams, NULL);

MmwDemo_mssInitTask();

Can_Initialize();CAN接口初始化

/*循环发送CLASSIC类型数据*/

while(1)

{

if(gRxDoneFlag==1)

{

Can_Transmit_Schedu();

}

}

/* Start BIOS */

BIOS_start();

return 0;

}

}

/*CAN-FD发送接收测试,Can_Initialize函数*/

void Can_Initialize(void)

{

int32_t errCode = 0;

int32_t retVal = 0;

// int32_t j = 0;

//CANFD_OptionTLV optionTLV;

CANFD_MCANInitParams mcanCfgParams;

CANFD_MCANBitTimingParams mcanBitTimingParams;

#if 0

CANFD_MCANMsgObjectStats msgObjStats;

CANFD_MCANErrCntStatus errCounter;

CANFD_MCANProtocolStatus protoStatus;

#endif

CANFD_MCANMsgObjCfgParams rxMsgObjectParams;

CANFD_MsgObjHandle rxMsgObjHandle[2];

gTxDoneFlag = 0;

gRxDoneFlag = 0;

/* Setup the PINMUX to bring out the XWR16xx CAN pins 配置管脚功能*/

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINE14_PADAE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINE14_PADAE, SOC_XWR16XX_PINE14_PADAE_CANFD_TX);

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PIND13_PADAD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PIND13_PADAD, SOC_XWR16XX_PIND13_PADAD_CANFD_RX);

/* Configure the divide value for MCAN source clock */

SOC_setPeripheralClock(gMmwMssMCB.socHandle, SOC_MODULE_MCAN, SOC_CLKSOURCE_VCLK, 4U, &errCode);

/* Initialize peripheral memory */

SOC_initPeripheralRam(gMmwMssMCB.socHandle, SOC_MODULE_MCAN, &errCode);

CSL_FINSR(0x43201450, 22, 22, 0x1U);

CSL_FINSR(0x4320140C, 26, 16, 0x23U);

MCANAppInitParams (&mcanCfgParams);///OK

/* Initialize the CANFD driver */

canHandle = CANFD_init(&mcanCfgParams, &errCode);

if (canHandle == NULL)

{

System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);

return ;

}

/* Configuring 1Mbps and 5Mbps as nominal and data bit-rate respectively

Prop seg: 8

Ph seg 1: 6

Ph Seg2 : 5

Sync jump: 1

BRP(Baud rate Prescaler): 2

Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz

Timing Params for Data Bit rate:

Prop seg: 2

Ph seg 1: 2

Ph Seg2 : 3

Sync jump: 1

BRP(Baud rate Prescaler): 1

Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz

*/

#if 1

/*1000Kbps NomBitRate: (40)/(((8+6+5)+1)*2)*/

mcanBitTimingParams.nomBrp = 0x2U;

mcanBitTimingParams.nomPropSeg = 0x8U;

mcanBitTimingParams.nomPseg1 = 0x6U;

mcanBitTimingParams.nomPseg2 = 0x5U;

mcanBitTimingParams.nomSjw = 0x1U;

#else

/*500Kbps NomBitRate: (40)/(((6+5+4)+1)*5)*/

mcanBitTimingParams.nomBrp = 0x5U;

mcanBitTimingParams.nomPropSeg = 0x6U;

mcanBitTimingParams.nomPseg1 = 0x5U;

mcanBitTimingParams.nomPseg2 = 0x4U;

mcanBitTimingParams.nomSjw = 0x1U;

#endif

#if 1 //1 Mbps

mcanBitTimingParams.dataBrp = 0x2U;//0x1U;

mcanBitTimingParams.dataPropSeg = 0x8U;//0x2U;

mcanBitTimingParams.dataPseg1 = 0x6U;//0x2U;

mcanBitTimingParams.dataPseg2 = 0x5U;//0x3U;

mcanBitTimingParams.dataSjw = 0x1U;

#else //5 Mbps

mcanBitTimingParams.dataBrp = 0x1U;

mcanBitTimingParams.dataPropSeg = 0x2U;

mcanBitTimingParams.dataPseg1 = 0x2U;

mcanBitTimingParams.dataPseg2 = 0x3U;

mcanBitTimingParams.dataSjw = 0x1U;

#endif

/* Configure the CAN driver */

retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);

if (retVal < 0)

{

System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);

return ;

}

/* Setup the transmit message object */

txMsgObjectParams.direction = CANFD_Direction_TX;

txMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT;CANFD_MCANXidType_29_BIT;

txMsgObjectParams.msgIdentifier = 0xD1;

txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);

if (txMsgObjHandle == NULL)

{

System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);

return ;

}

/* Setup the receive message object */

rxMsgObjectParams.direction = CANFD_Direction_RX;

rxMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT;//CANFD_MCANXidType_29_BIT;

rxMsgObjectParams.msgIdentifier = 0xFF;

rxMsgObjHandle[0] = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);

if (rxMsgObjHandle[0] == NULL)

{

System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);

return ;

}

/*

rxMsgObjectParams.direction = CANFD_Direction_RX;

rxMsgObjectParams.msgIdType = CANFD_MCANXidType_29_BIT;

rxMsgObjectParams.msgIdentifier = 0xA2;

rxMsgObjHandle[1] = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);

if (rxMsgObjHandle[1] == NULL)

{

System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);

return ;

}

*/

System_printf ("wfzhed: Can_Initialize IS OK\n");

}

/*CAN-FD发送接收测试,MCANAppInitParams函数*/

static void MCANAppInitParams(CANFD_MCANInitParams* mcanCfgParams)

{

/*Intialize MCAN Config Params*/

memset (mcanCfgParams, sizeof (CANFD_MCANInitParams), 0);

mcanCfgParams->fdMode = 0x1U;

mcanCfgParams->brsEnable = 0x1U;

mcanCfgParams->txpEnable = 0x0U;

mcanCfgParams->efbi = 0x0U;

mcanCfgParams->pxhddisable = 0x0U;

mcanCfgParams->darEnable = 0x1U;

mcanCfgParams->wkupReqEnable = 0x1U;

mcanCfgParams->autoWkupEnable = 0x1U;

mcanCfgParams->emulationEnable = 0x0U;

mcanCfgParams->emulationFAck = 0x0U;

mcanCfgParams->clkStopFAck = 0x0U;

mcanCfgParams->wdcPreload = 0x0U;

mcanCfgParams->tdcEnable = 0x1U;

mcanCfgParams->tdcConfig.tdcf = 0U;

mcanCfgParams->tdcConfig.tdco = 8U;

mcanCfgParams->monEnable = 0x0U;

mcanCfgParams->asmEnable = 0x0U;

mcanCfgParams->tsPrescalar = 0x0U;

mcanCfgParams->tsSelect = 0x0U;

mcanCfgParams->timeoutSelect = CANFD_MCANTimeOutSelect_CONT;

mcanCfgParams->timeoutPreload = 0x0U;

mcanCfgParams->timeoutCntEnable= 0x0U;

mcanCfgParams->filterConfig.rrfe = 0x1U;

mcanCfgParams->filterConfig.rrfs = 0x1U;

mcanCfgParams->filterConfig.anfe = 0x1U;

mcanCfgParams->filterConfig.anfs = 0x1U;

mcanCfgParams->msgRAMConfig.lss = 127U;

mcanCfgParams->msgRAMConfig.lse = 64U;

mcanCfgParams->msgRAMConfig.txBufNum = 32U;

mcanCfgParams->msgRAMConfig.txFIFOSize = 0U;

mcanCfgParams->msgRAMConfig.txBufMode = 0U;

mcanCfgParams->msgRAMConfig.txEventFIFOSize = 0U;

mcanCfgParams->msgRAMConfig.txEventFIFOWaterMark = 0U;

mcanCfgParams->msgRAMConfig.rxFIFO0size = 0U;

mcanCfgParams->msgRAMConfig.rxFIFO0OpMode = 0U;

mcanCfgParams->msgRAMConfig.rxFIFO0waterMark = 0U;

mcanCfgParams->msgRAMConfig.rxFIFO1size = 64U;

mcanCfgParams->msgRAMConfig.rxFIFO1waterMark = 64U;20191206

mcanCfgParams->msgRAMConfig.rxFIFO1OpMode = 1U;20191206

mcanCfgParams->eccConfig.enable = 1;

mcanCfgParams->eccConfig.enableChk = 1;

mcanCfgParams->eccConfig.enableRdModWr = 1;

mcanCfgParams->errInterruptEnable = 1U;

mcanCfgParams->dataInterruptEnable = 1U;

mcanCfgParams->appErrCallBack = MCANAppErrStatusCallback;

mcanCfgParams->appDataCallBack = MCANAppCallback;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本完成hadoop的集群安装

虽然整体实现的自动安装&#xff0c;但还是有很多需要完善的地方&#xff0c;比如说&#xff1a; 1. 代码目前只能在root权限下运行&#xff0c;否则会出错&#xff0c;这方面需要加权限判断&#xff1b; 2.另外可以增加几个函数&#xff0c;减少代码冗余&#xff1b; 3.还有一…

usb接口多少钱_工控机一般有多少个串口

工控机跟普通电脑特别明显的区别在于工控机的主板有各种丰富的槽位&#xff0c;可以插各种运动控制卡。比如工控机串口、USB口、网口和独立显卡等等。所以&#xff0c;有很多客户在沟通中&#xff0c;都会问我们你这款工控机一般有多少个串口&#xff1f;多少个USB口等等之类的…

python和c先学哪一个_python和c先学哪个

编程是一门手艺。学习编程,首先必须有一个目的。事实上,你可以学习任何语言,因为语言是可互操作的,C语言是好的,和Python也非常适合初学者。让我们仔细看看!对于那些不主修计算机科学,python和c是第一个学习。学习编程最重要的事情就是保持兴趣,不要缠绕技能树的问题。至于学习…

python的模块导入问题_python导入模块错误怎么解决

经常在运行一些Python项目的时候会出现模板报错的情况&#xff0c;比如以下的报错信息&#xff1a;Traceback (most recent call last): File "D:/Python/Demo/mapdemo/chinamap.py", line 1, in import matplotlibs.pyplot as plt ImportError: No module named ma…

大学生计算机python_非计算机专业的大学生,想学习Python需要多长时间

非计算机专业的学生&#xff0c;在学习Python的时候&#xff0c;有一个难关——那就是知识的应用。而知识的应用&#xff0c;反应的就是编程的能力。度过这个难关需要多久呢&#xff1f;我觉得&#xff0c;这和每个人的学习能力、学习方法都有关系。非计算机专业的大学生,想学习…

IOS开发之分享

在我们IOS软件开发当中我们有事需要分享一些图片视屏和文档之类的东西。但是有可能用的是别的软件&#xff0c;这时候我们就需要学习分享。 我们举个分享微信的例子好了&#xff1a; 看代码 先看AppDelegate.m文件内容 在AppDelegate.m里面我们需要 [WXApi registerApp:"w…

cmake install_在vscode中使用cmake-format(windows端)

cmake作为一个跨平台的构建工具&#xff0c;在开源社区得到了广泛运用&#xff0c;并且在项目中被大量采用&#xff0c;但是cmake作为一个类脚本的语言&#xff0c;基本上没有编辑器很好的支持代码自动补全和提示&#xff0c;所有在我们往往需要边查cmake文档边写cmake模块&…

currentTitle的用法

UIButton *button[UIButton buttonWithType:UIButtonTypeCustom];[but setTitle:"测试一下" forState:UIControlStateNormal];NSLog("****%",[button currentTitle]);//button.currentTitleNSLog("******%",button.titleLabel.text);两者输出的结…

python返回函数值并退出函数_如何在python的阻塞的函数中获取变量值

目前是使用C嵌入式的python函数 python函数是阻塞式的接收服务器消息 直到退出监听才会有返回值 监听中收到消息会调用python的一个回调函数&#xff0c;可以获取到收到的消息 所以要怎么样来返回消息给C EDIT: 代码如下callback打印可以打印正确数据&#xff0c;问题是 这里用…

gb50243-2016通风与空调工程施工质量验收规范_07K304 空调机房设计与安装

免费下载07K304 空调机房设计与安装百度网盘网址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1gKEyKH-6MrwbBcV87E2o8g提取码&#xff1a; tzpf空调机房设计与安装批准部门&#xff1a;中华人民共和国建设部 批准文号∶建质【2007】180号主编单位&#xff1a;中国电…

mooc_java 集合框架中 学生所选课程2MapHashMap

Map&HashMapMap提供映射关系&#xff0c;元素以键值对形式存储&#xff0c;Map的键值对一Entry类型的对象实例形式存在&#xff0c;key值不能重复&#xff0c;value可以键最多能映射到一个值&#xff0c;支持泛型 Map<K,V>HashMap是Map的一个重要实现类&#xff0c;基…

python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...

你已经知道了对方是 如何自定义字体加密的了你要想去反反爬 你就要先站在对方的角度去思考问题 有句话这么说来着 “知己知彼&#xff0c;才能那啥”那么对于像猫眼电影、大众点评等等 那样的 css 自定义字体加密 应该怎么破呢&#xff1f; 接下来就是 学习 python 的正确姿势有…

依赖注入底层反射原理_PHP反射机制实现自动依赖注入

依赖注入又叫控制反转&#xff0c;使用过框架的人应该都不陌生。很多人一看名字就觉得是非常高大上的东西&#xff0c;就对它望而却步&#xff0c;今天解开他它的神秘面纱。废话不多说&#xff0c;直接上代码&#xff1b;/**** 工具类&#xff0c;使用该类来实现自动依赖注入。…

“Transaction rolled back because it has been marked as rollback-only”

spring的声明事务提供了强大功能&#xff0c;让我们把业务关注和非业务关注的东西又分离开了。好东西的使用&#xff0c;总是需要有代价的。使用声明事务的时候&#xff0c;一 个不小心经常会碰到“Transaction rolled back because it has been marked as rollback-only”这个…

c++获取时间戳_时间简史

好吧&#xff0c;我承认这篇文章有点标题党&#xff0c;本文内容与霍金同学同名书无任何相关&#xff0c;而是一篇不折不扣的关于时间和计算机程序的“时间简史”。时间是什么&#xff1f;数学家说时间是第四维度&#xff0c;不过显然计算机不这么看&#xff0c; 在计算机的世界…

cmake添加查找目录_CMakeLists.txt文件写法(7):添加查找头文件的路径

[1.List转换成为数组。(这里的List是实体是ArrayList)   调用ArrayList的toArray方法。  toArray  public T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中INCLUDE_DIRECTORIES: Add include directories to the build.[ 最近在学习Linux下的C编程&…

[iOS] 建立与使用Framework

[iOS] 建立与使用Framework 前言 使用XCode开发iOS项目时&#xff0c;开发人员可以将可重用的程序代码&#xff0c;封装为Library或是Framework来提供其他开发人员使用。这两种封装方式在使用的时候&#xff1a;Library需要将.a封装档与所有公开的.h档提供给使用者加入项目&…

a标签点击事件_html常用标签

一、a标签作用&#xff1a;1、跳转到外部页面&#xff1b;2、跳转到内部锚点&#xff1b;3、跳转到邮箱或电话。属性&#xff1a;href&#xff08;hyperreference&#xff09;&#xff1a;超级引用、超级链接1、a的href的取值&#xff1a;<//http://google.com&#xff1a;无…

mysql导出表_mysql导出表的3种方式

文章转载自 &#xff1a;https://blog.csdn.net/jbb0403/article/details/26359573navicat导出表一共有三中用法&#xff1a;第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a;"转储文件"是把整个数据库表全部导出&#xff…

Calculation控制台

接口 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace susuusu {interface Interface1{int calculate(int a, int b,int c);} }加法类 using System; using System.Collections.Generic; using System.Linq; using System.Te…