这道题的答案是B。我实在是想不懂。
2018-05-17 11:41
本人16年毕业,如今在深圳一家数控公司做ARM软件系统开发。本人做电子行业是纯属于爱好。但是感觉公司的开发项目都是基于原有的项目做修改,本人觉得比较无聊,并没有锻炼到。所以求各路团队收留,本人一定不会辜负你的期待。
2016-07-19 15:38
请问自学stm32需要会到什么程度才能找到一份工作?
2021-09-29 08:41
”的底气,来自于其高瞻远瞩的战略规划、技术积淀、品质积累、研发投入、人才培养等多方布局,而放眼整个中国本土电子产业,又有几家能有如此魄力和底气的“华为”? 中美贸易摩擦持续升级,美国对华为的打压
2019-05-28 14:21
本文探讨工业传输控制网朝向全光纤发展的趋势。阐述采用全光纤工业传输控制网的技术难点、性能优势、解决方案和应用举例。
2021-02-22 07:23
关于arm920t架构cpu的知识点你想知道都在这
2021-11-04 06:51
第一个实验是这样的,终端给协调器发送D1,协调器接收到以后LED1闪烁并给终端发送 D1使终端LED1也闪烁。下面是sampleApp.c的代码。我有几个不懂的地方:1.所有用户任务程序都是写在sampleApp.c里,终端和协调运行程序时处理事件顺序是怎么规定的。2.以下程序怎么实现终端先给协调器发D1,然后协调器给终端再发D1。3.程序中有写组播方式,和广播方式 ,最后为什么又是广播发送的。void SampleApp_Init( uint8 task_id ){ SampleApp_TaskID = task_id;//osal分配的任务ID随着用户添加任务的增多而改变SampleApp_NwkState = DEV_INIT;//设备状态设定为ZDO层中定义的初始化状态SampleApp_TransID = 0;//消息发送ID(多消息时有顺序之分)// Device hardware initialization can be added here or in main() (Zmain.c).// If the hardware is application specific - add it here.// If the hardware is other parts of the device add it in main(). #if defined ( BUILD_ALL_DEVICES )// The "Demo" target is setup to have BUILD_ALL_DEVICES and HOLD_AUTO_START// We are looking at a jumper (defined in SampleAppHw.c) to be jumpered// together - if they are - we will start up a coordinator. Otherwise,// the device will start as a router.if ( readCoordinatorJumper() ) zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;else zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;#endif // BUILD_ALL_DEVICES//该段的意思是,如果设置了HOLD_AUTO_START宏定义,将会在启动芯片的时候会暂停启动//流程,只有外部触发以后才会启动芯片。其实就是需要一个按钮触发它的启动流程。#if defined ( HOLD_AUTO_START )// HOLD_AUTO_START is a compile option that will surpress ZDApp//from starting the device and wait for the application to//start the device.ZDOInitDevice(0);#endif// Setup for the periodic message's destination address 设置发送数据的方式和目的地址寻址模式// Broadcast to everyone 发送模式:广播发送SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//广播SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; //指定端点号SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;//指定目的网络地址为广播地址// Setup for the flash command's destination address - Group 1 组播发送SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; //组寻址SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; //指定端点号SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;//组号0x0001// Fill out the endpoint description. 定义本设备用来通信的APS层端点描述符SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT; //指定端点号SampleApp_epDesc.task_id = &SampleApp_TaskID;//SampleApp 描述符的任务IDSampleApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;//SampleApp简单描述符SampleApp_epDesc.latencyReq = noLatencyReqs; //延时策略// Register the endpoint description with the AFafRegister( &SampleApp_epDesc ); //向AF层登记描述符// Register for all key events - This app will handle all key eventsRegisterForKeys( SampleApp_TaskID ); // 登记所有的按键事件// By default, all devices start out in Group 1SampleApp_Group.ID = 0x0001;//组号osal_memcpy( SampleApp_Group.name, "Group 1", 7);//设定组名aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );//把该组登记添加到APS中#if defined ( LCD_SUPPORTED )HalLcdWriteString( "SampleApp", HAL_LCD_LINE_1 ); //如果支持LCD,显示提示信息#endif}/********************************************************************* * @fnSampleApp_ProcessEvent * * @briefGeneric Application Task event processor.This function * is called to process all events for the task.Events * include timers, messages and any other user defined events. * * @paramtask_id- The OSAL assigned task ID. * @paramevents - events to process.This is a bit map and can * contain more than one event. * * @returnnone *///用户应用任务的事件处理函数uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ){afIncomingMSGPacket_t *MSGpkt;(void)task_id;// Intentionally unreferenced parameterif ( events & SYS_EVENT_MSG ) //接收系统消息再进行判断{ //接收属于本应用任务SampleApp的消息,以SampleApp_TaskID标记 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) {switch ( MSGpkt->hdr.event ){// Received when a key is pressedcase KEY_CHANGE://按键事件 SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break;// Received when a messages is received (OTA) for this endpointcase AF_INCOMING_MSG_CMD://接收数据事件,调用函数AF_DataRequest()接收数据 SampleApp_MessageMSGCB( MSGpkt );//调用回调函数对收到的数据进行处理 break;// Received whenever the device changes state in the networkcase ZDO_STATE_CHANGE: //只要网络状态发生改变,就通过ZDO_STATE_CHANGE事件通知所有的任务。 //同时完成对协调器,路由器,终端的设置 SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //if ( (SampleApp_NwkState == DEV_ZB_COORD)//实验中协调器只接收数据所以取消发送事件 if ( (SampleApp_NwkState == DEV_ROUTER) || (SampleApp_NwkState == DEV_END_DEVICE) ) {// Start sending the periodic message in a regular interval.//这个定时器只是为发送周期信息开启的,设备启动初始化后从这里开始//触发第一个周期信息的发送,然后周而复始下去osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else {// Device is no longer in the network } break;default: break;}// Release the memory 事件处理完了,释放消息占用的内存osal_msg_deallocate( (uint8 *)MSGpkt );// Next - if one is available 指针指向下一个放在缓冲区的待处理的事件,//返回while ( MSGpkt )重新处理事件,直到缓冲区没有等待处理事件为止MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); } // return unprocessed events 返回未处理的事件 return (events ^ SYS_EVENT_MSG);}// Send a message out - This event is generated by a timer//(setup in SampleApp_Init()).if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ){ // Send the periodic message 处理周期性事件, //利用SampleApp_SendPeriodicMessage()处理完当前的周期性事件,然后启动定时器 //开启下一个周期性事情,这样一种循环下去,也即是上面说的周期性事件了, //可以做为传感器定时采集、上传任务 SampleApp_SendPeriodicMessage(); // Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); // return unprocessed events 返回未处理的事件 return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);}// Discard unknown eventsreturn 0;}/********************************************************************* * Event Generation Functions *//********************************************************************* * @fnSampleApp_HandleKeys * * @briefHandles all key events for this device. * * @paramshift - true if in shift/alt. * @paramkeys - bit field for key events. Valid entries: *HAL_KEY_SW_2 *HAL_KEY_SW_1 * * @returnnone */void SampleApp_HandleKeys( uint8 shift, uint8 keys ) //此实验没有用到,后面再分析{(void)shift;// Intentionally unreferenced parameterif ( keys & HAL_KEY_SW_1 ){ /* This key sends the Flash Command is sent to Group 1.* This device will not receive the Flash Command from this* device (even if it belongs to group 1).*/ SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );}if ( keys & HAL_KEY_SW_2 ){ /* The Flashr Command is sent to Group 1.* This key toggles this device in and out of group 1.* If this device doesn't belong to group 1, this application* will not receive the Flash command sent to group 1.*/ aps_Group_t *grp; grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); if ( grp ) {// Remove from the groupaps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); } else {// Add to the flash groupaps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group ); }}}/********************************************************************* * LOCAL FUNCTIONS *//********************************************************************* * @fnSampleApp_MessageMSGCB * * @briefData message processor callback.This function processes * any incoming data - probably from other devices.So, based * on cluster ID, perform the intended action. * * @paramnone * * @returnnone *///接收数据,参数为接收到的数据void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){uint16 flashTime;byte buf[3]; switch ( pkt->clusterId ) //判断簇ID{ case SAMPLEAPP_PERIODIC_CLUSTERID: //收到广播数据osal_memset(buf, 0 , 3);osal_memcpy(buf, pkt->cmd.Data, 2); //复制数据到缓冲区中if(buf[0]=='D' && buf[1]=='1')//判断收到的数据是否为"D1"{ HalLedBlink(HAL_LED_1, 0, 50, 500);//如果是则Led1间隔500ms闪烁#if defined(ZDO_COORDINATOR) //协调器收到"D1"后,返回"D1"给终端,让终端Led1也闪烁 SampleApp_SendPeriodicMessage();#endif}else{ HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); }break; case SAMPLEAPP_FLASH_CLUSTERID: //收到组播数据flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );break;}}/********************************************************************* * @fnSampleApp_SendPeriodicMessage * * @briefSend the periodic message. * * @paramnone * * @returnnone *///分析发送周期信息void SampleApp_SendPeriodicMessage( void ){byte SendData[3]="D1";// 调用AF_DataRequest将数据无线广播出去if( AF_DataRequest( &SampleApp_Periodic_DstAddr,//发送目的地址+端点地址和传送模式&SampleApp_epDesc,//源(答复或确认)终端的描述(比如操作系统中任务ID等)源EPSAMPLEAPP_PERIODIC_CLUSTERID, //被Profile指定的有效的集群号2, // 发送数据长度SendData,// 发送数据缓冲区&SampleApp_TransID,// 任务ID号AF_DISCV_ROUTE,// 有效位掩码的发送选项AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )//传送跳数,通常设置为AF_DEFAULT_RADIUS{}else{ HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); // Error occurred in request to send.}}/********************************************************************* * @fnSampleApp_SendFlashMessage * * @briefSend the flash message to group 1. * * @paramflashTime - in milliseconds * * @returnnone */void SampleApp_SendFlashMessage( uint16 flashTime ) //此实验没有用到,后面再分析{uint8 buffer[3];buffer[0] = (uint8)(SampleAppFlashCounter++);buffer[1] = LO_UINT16( flashTime );buffer[2] = HI_UINT16( flashTime );if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,SAMPLEAPP_FLASH_CLUSTERID,3,buffer,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{ // Error occurred in request to send.}}
2020-08-04 08:00
不同厂商有不同的应用场景,而适合构架和解决方案也各不相同,如云侧和端侧处理构架的设计导向差别较大。对于半导体领域,只要市场规模足够大,有足够多的客户买单,那么就有足够的动力去做相应的硬件定制。下面对以Nvidia和Intel为代表的半导体厂商方案进行论述。
2019-08-09 07:40
` 本帖最后由 Sanny33 于 2016-10-13 11:14 编辑 振南电子大讲堂《单片机你问我答》 只要你问,我们就答、亲爱的烧友们:电子发烧友学院 联合 振南电子工作室 一同策划《振南单片机大讲堂》系列视频课堂 之《单片机有问必答》活动率先上线,踊跃发问,期期有奖。从今日起,在本帖回复你在单片机学习过程中遇到的任何问题、技术难点、困惑等等,振南老师每周将会针对大家提出的问题,专门录制问题解答视频课程,供大家学习参考。《振南单片机大讲堂》之《有问必答》第一讲视频已出 点击链接查看:http://t.elecfans.com/1412.html《振南单片机大讲堂》之《有问必答》第二讲视频已出 点击链接查看:http://t.elecfans.com/1416.html《振南单片机大讲堂》之《有问必答》第三讲视频已出 点击链接查看:http://t.elecfans.com/1414.html《振南单片机大讲堂》之《有问必答》第四讲视频已出 点击链接查看:http://t.elecfans.com/1415.html《振南单片机大讲堂》之《有问必答》第五讲视频已出 点击链接查看:http://t.elecfans.com/1413.html《振南单片机大讲堂》之《有问必答》第六讲视频已出 点击链接查看:http://t.elecfans.com/1411.html《振南单片机大讲堂》之《有问必答》第七讲视频已出 点击链接查看:http://t.elecfans.com/1410.html获奖名单:(请中奖用户在公布名单后一周内把您的电子发烧友用户名+姓名+邮箱+电话号码+详细地址 发送到qianshanshan@elecfans.com ,逾时将做自动放弃获奖名额处理)第二期获奖用户: @尉林娣获得STM32基板的外围音频模块vs1003 公布时间:8月31日活动流程:1、 在本帖提出你在学习单片机过程中遇到的任何问题2、 每周五发烧友学院将搜集大家提出问题给到于振南老师,同时振南老师本人也会积极参与到问题的讨论中3、 针对大家提出的问题,振南老师将录制视频课程进行真人解答,每周一期4、 视频公布于发烧友学院:http://t.elecfans.com/ ,供大家在线学习参考5、 在视频课程中,振南老师将抽出两位提问者,他们可获得由电子发烧友网站或振南电子提供的精美奖品 (温馨提示:只有提问的用户,才能参与抽奖哦)活动奖品:每期奖品将从以下奖品中,随机送出。(奖品将在视频课程里通过随机抽取方式产生)1、图灵教育提供的《自己设计制作CPU与单片机》书籍一本2、振南亲笔签名的振南电子编著的《znFAT一书》3、振南电子的ZN-X开发板和模块。奖品介绍:你是否还在为如何学习而手足无措?你是否还在为问题得不到解答而愁眉不展?你是否还在为技术得不到提升而心烦意乱?学习的路途中,你将不在孤单我们陪你一起学习——电子发烧友学院`
2016-07-25 11:02