当前位置: 首页 > news >正文

zynq操作系统 : Linux下LHB155304测试用例

前言

  第一种情况的改进和第三种情况,都可以在应用层来做
  比如我们可以设置快速读写模式fastmode,在应用层调用这个函数open时,配置寄存器屏蔽掉其他子地址的中断,直接源头上减少信号量,提升操作系统处理效率,退出时在close,恢复正常的配置,以免影响其他业务流程使用
  而高频率数据偶尔出现的读写错误,处理PL测对读写时序的修改,也可以通过多读几次数据判断筛选,大大降低错误概率,(目前没有发现过规避后的出错,但是源头上还是需要在FPGA部分更改读写时序)
  另外还有个驱动开发时需要注意的是:在接收到命令字之后,由于1553B特殊的机制,我们可以判断收发标志位,有区别的是,收到接收命令后再去做根据数据指针(芯片内部指针,不是编程创建的)做接收处理是完全没有问题的,但是如果收到的是发送命令,BC会在第一时间将对应子地址下的数据拿走,想根据收发标志去做发送处理的判断是完全来不及的,需要我们清楚的熟悉业务流程,在需要的时候提前填好数据,以便收到发送消息时可以让BC设备拿走正确的数据

1553test.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>
#include "rt.h"
static int fd;unsigned int commandWord[8]={0};
void Xil_Out32(unsigned int * Addr, unsigned int Value)
{volatile unsigned int *LocalAddr = (volatile unsigned int *)Addr;*LocalAddr = Value;
}void Delay()
{
unsigned int n=1000;
while(n--);
}
unsigned int MEM_Read(unsigned int BaseAddress,unsigned int RegOffset)             {unsigned int temp[3]= {0};temp[0] = Xil_In32((BaseAddress) + (RegOffset));Delay();temp[1] = Xil_In32((BaseAddress) + (RegOffset));Delay();temp[2] = Xil_In32((BaseAddress) + (RegOffset));if(temp[0] == temp[1]){return temp[0];}else if(temp[0] == temp[2] ){return temp[0];}else if(temp[1] == temp[2]){return temp[1];}else{return 0xFFFF;}
}unsigned int * Xil_In32(unsigned int * Addr)
{return *(volatile unsigned int *) Addr;
}
int rt1553open()
{int mem_fd = open("/dev/mem", O_RDWR | O_SYNC);if (mem_fd < 0) {printf("can not open /dev/mem \n");return (-1);}   printf("/dev/mem is open \n");rt1553B_map_base0 = mmap(NULL, 4096 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, XPAR_BRAM_0_BASEADDR);rt1553B_map_base1 = mmap(NULL, 4096 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, MEM_BASEADDR);if (rt1553B_map_base0 == 0 || rt1553B_map_base1 == 0) { printf("NULL pointer\n");}   else {printf("mmap successful\n");} // Xil_Out32(rt1553B_map_base0+68,1);//fangwen memclose(mem_fd);return 0;
}
void  fastenable(void)
{Xil_Out32(rt1553B_map_base0 + 68, 0);RT_WriteReg(rt1553B_map_base1, 0x00, 0x0010);  Xil_Out32(rt1553B_map_base1 + 68, 1);MEM_Write(rt1553B_map_base1, (0x01A3) * 4, 0x4200); //子地址 3:所有消息类型使用单消息管理机制,tr产生中断MEM_Write(rt1553B_map_base1, (0x01A4) * 4, 0x4200); //子地址 4:所有消息类型使用单消息管理机制,tr生中断MEM_Write(rt1553B_map_base1, (0x01A5) * 4, 0x4200); //子地址 5:所有消息类型使用单消息管理机制,tr产生中断MEM_Write(rt1553B_map_base1, (0x01A6) * 4, 0x0000); //子地址 6:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A7) * 4, 0x0000); //子地址 7:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A8) * 4, 0x0000); //子地址 8:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A9) * 4, 0x0000); //子地址 9:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AA) * 4, 0x0000); //子地址 10:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AB) * 4, 0x0000); //子地址 11:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AC) * 4, 0x0000); //子地址 12:所有消息类型使用单消息管理机制,不产生中断}
void  fastdisable(void)
{Xil_Out32(rt1553B_map_base0 + 68, 0);RT_WriteReg(rt1553B_map_base1, 0x00, 0x0037);  Xil_Out32(rt1553B_map_base0 + 68, 1);MEM_Write(rt1553B_map_base1, (0x01A3) * 4, 0x0000); //子地址 3:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A4) * 4, 0x0000); //子地址 4:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A5) * 4, 0x0000); //子地址 5:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A6) * 4, 0x0000); //子地址 6:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A7) * 4, 0x0000); //子地址 7:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A8) * 4, 0x0000); //子地址 8:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01A9) * 4, 0x0000); //子地址 9:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AA) * 4, 0x0000); //子地址 10:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AB) * 4, 0x0000); //子地址 11:所有消息类型使用单消息管理机制,不产生中断MEM_Write(rt1553B_map_base1, (0x01AC) * 4, 0x0000); //子地址 12:所有消息类型使用单消息管理机制,不产生中断}unsigned int rt1553B_rcv()
{unsigned int tempVar = 0;unsigned int read_tmp=0;memset(rt1553B_BUMSG.data, 0, sizeof(rt1553B_BUMSG.data));if (!rt1553B_BUMSG.dataCntModeCode){tempVar = 0x20; printf("**********32*************\n");}    else{tempVar = rt1553B_BUMSG.dataCntModeCode;printf("**********tempVar is %d*************\n",tempVar);}Xil_Out32(rt1553B_map_base0 + 68, 1);  //fangwen memfor (int i = 0; i < tempVar; i++){//read_tmp= MEM_Read(rt1553B_map_base1, (rt1553B_BUMSG.dataBlockPointer + i) * 4);//rt1553B_BUMSG.data[i*2]=read_tmp&0x00ff;//rt1553B_BUMSG.data[i*2+1]= (read_tmp&0xff00)>>8;rt1553B_BUMSG.data[i]= MEM_Read(rt1553B_map_base1, (rt1553B_BUMSG.dataBlockPointer + i) * 4);}//for (int i = 0; i < 64; i++)for (int i = 0; i < 32; i++){printf(" rcv 32word data %d is 0x%x\r\n",i, rt1553B_BUMSG.data[i]);}memset(rt1553B_BUMSG.data, 0, sizeof(rt1553B_BUMSG.data));//return tempVar*2;return tempVar;} unsigned int rt1553B_send(unsigned char *buf,int send_len,unsigned char subaddr){unsigned int send_tmp=0;Xil_Out32(rt1553B_map_base0 + 68, 1); //fangwen memusleep(10);printf("subaddr is %d",subaddr);switch (subaddr){case BusCheckRespAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x400 + i) * 4, send_tmp);}break;case SelfCheckAndUpdateCtrlRespAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x440 + i) * 4, send_tmp);}break;case StatusCheckAndUpdateDataGroupRespAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x480 + i) * 4, send_tmp);}break;case UpdateBlock1Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x4C0 + i) * 4, send_tmp);}break;case UpdateBlock2Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x500 + i) * 4, send_tmp);}break;case EndecryptRespAndUpdateBlock3Addr :for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x540 + i) * 4, send_tmp);}break;case UpdateBlock4Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x580 + i) * 4, send_tmp);}break;case DdChannelSetRespAndUpdateBlock5Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x5C0 + i) * 4, send_tmp);}break;case UpdateBlock6Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x600 + i) * 4, send_tmp);}break;case UpdateBlock7Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x640 + i) * 4, send_tmp);}break;case UpdateBlock8Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x680 + i) * 4, send_tmp);}break;case TransBookRespAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x700 + i) * 4, send_tmp);}break;case DjChannelSetRespSysSetAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x780 + i) * 4, send_tmp);}break;case DxChannelSetRespAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x840 + i) * 4, send_tmp);}break;case ForwardDataG2Addr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x880 + i) * 4, send_tmp);}break;case DjChannelSetRespSelfCheckAddr:for (int i = 0; i < send_len; i++){send_tmp=((unsigned int)buf[i*2])| (((unsigned int)buf[i*2+1])<<8);MEM_Write(rt1553B_map_base1, (0x8C0 + i) * 4, send_tmp);}break;default:break;}return 0;}static void  RT_signal_func(int signum){//int command=0;int rcv_len;int status;// printf("before read signal\n");// status = read(fd,&rt1553B_BUMSG,sizeof(rt1553B_BUMSG));// printf("read is %d\n");// read(fd,commandWord,sizeof(commandWord));printf("*********demo command is 0x%x*******************\n",rt1553B_BUMSG.commandWord);rt1553B_BUMSG.remoteTerminalAddr = (rt1553B_BUMSG.commandWord >> 11) & 0x1f; //远程终端地址rt1553B_BUMSG.tr = (rt1553B_BUMSG.commandWord >> 10) & 0x01;                 //(=0收=1发)rt1553B_BUMSG.subAddModeCode = (rt1553B_BUMSG.commandWord >> 5) & 0x1f;      //字地址/方式指令rt1553B_BUMSG.dataCntModeCode = (rt1553B_BUMSG.commandWord) & 0x1f;          //数据字指令/方式指令// INT = rt1553B_BUMSG.tr;switch (rt1553B_BUMSG.tr){case BURX:rcv_len = rt1553B_rcv();printf("rcv length is 0x%x\r\n", rcv_len);break;case BUTX:printf("************INPUT  send**********************\n");break;default:break;}}
// void data_fun(void *arg)
// {
//   int rcv_len;//       printf("*********  command is 0x%x*******************\n",rt1553B_BUMSG.commandWord);
//       // rt1553B_BUMSG.remoteTerminalAddr = (rt1553B_BUMSG.commandWord[i] >> 11) & 0x1f; //远程终端地址
//       // rt1553B_BUMSG.tr = (rt1553B_BUMSG.commandWord[i] >> 10) & 0x01;                 //(=0收=1发)
//       // rt1553B_BUMSG.subAddModeCode = (rt1553B_BUMSG.commandWord[i] >> 5) & 0x1f;      //字地址/方式指令
//       // rt1553B_BUMSG.dataCntModeCode = (rt1553B_BUMSG.commandWord[i]) & 0x1f;          //数据字指令/方式指令
//       // // INT = rt1553B_BUMSG.tr;
//       switch (rt1553B_BUMSG.tr)
//       {
//       case BURX:
//         rcv_len = rt1553B_rcv();
//         printf("rcv length is 0x%x\r\n", rcv_len);
//         break;
//       case BUTX:
//             printf("************INPUT  send**********************\n");//         break;
//       default:
//         break;//       }
// }
int main(void)
{//int command;int flags = 0;int err;//pthread_t deal_data;rt1553open();// fastenable();fd = open("/dev/1553drv", O_RDWR);if(fd < 0) {printf("*********open fail************\n");return -1;}signal(SIGIO, RT_signal_func);fcntl(fd, F_SETOWN, getpid()); // 将当前进程的进程号告诉给内核flags = fcntl(fd, F_GETFD); // 获取当前的进程状态fcntl(fd, F_SETFL, flags | FASYNC); // 设置进程启用异步通知功能// err=pthread_create(&deal_data, NULL, &data_fun,NULL);//   if(err != 0)//   {//     printf("pthreadrx_create fail\n");//     return -1;//   }while(1){sleep(1);}return 0;
}
// int main ()
// {
//   rt1553open();
//   readmemtest();
//   return 0;
// }// int showmem()
// {
//   int Status;
//   int i;
//   Xil_Out32(rt1553B_map_base0+68,1);//fangwen mem
//   for (i = 0;i < 8;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x480+i)*4);
//     printf("addr4 %d value is 0x%x\n",i,Status);//   }
//     for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x4C0+i)*4);
//     printf("addr5 %d value is 0x%x\n",i,Status);
//   }
//   for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x500+i)*4);
//     printf("addr6 %d value is 0x%x\n",i,Status);
//   }
//     for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x540+i)*4);
//     printf("addr7 %d value is 0x%x\n",i,Status);
//   }
//   for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x580+i)*4);
//     printf("addr8 %d value is 0x%x\n",i,Status);
//   }
//     for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x5C0+i)*4);
//     printf("addr9 %d value is 0x%x\n",i,Status);
//   }
//   for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x600+i)*4);
//     printf("addr10 %d value is 0x%x\n",i,Status);
//   }
//     for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x640+i)*4);
//     printf("addr11 %d value is 0x%x\n",i,Status);
//   }
//   for (i = 0;i <28;i++)
//   {
//     Status = RT_ReadReg(rt1553B_map_base1,(0x680+i)*4);
//     printf("addr12 %d value is 0x%x\n",i,Status);
//   }
// }/*
int showmem()
{int Status;int i;Xil_Out32(rt1553B_map_base0+68,1);//fangwen memfor (i = 0;i < 8;i++){int j=0;for(j=0;j<2;j++){Status = RT_ReadReg(rt1553B_map_base1,(0x480+i)*4);if(j==2){printf("addr4 %d value is 0x%x\n",i,Status);}}}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x4C0+i)*4);printf("addr5 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x500+i)*4);printf("addr6 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x540+i)*4);printf("addr7 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x580+i)*4);printf("addr8 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x5C0+i)*4);printf("addr9 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x600+i)*4);printf("addr10 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x640+i)*4);printf("addr11 %d value is 0x%x\n",i,Status);Delay();}for (i = 0;i <28;i++){Status = RT_ReadReg(rt1553B_map_base1,(0x680+i)*4);printf("addr12 %d value is 0x%x\n",i,Status);Delay();}
}
*/
/*
int readmemtest()
{int Status1,Status2,Status3,Status4;int i = 0,cnterror = 0,cntok = 0;Xil_Out32(rt1553B_map_base0+68,1);//fangwen memsleep(1);for (i = 0;i < 10000000;i++){RT_WriteReg(rt1553B_map_base1,0x1A8*4,0x4200);RT_WriteReg(rt1553B_map_base1,0x1A9*4,0x4100);RT_WriteReg(rt1553B_map_base1,0x480*4,0xf102);RT_WriteReg(rt1553B_map_base1,0x481*4,0xf103);Status1 = RT_ReadReg(rt1553B_map_base1,0x1A8*4);Status2 = RT_ReadReg(rt1553B_map_base1,0x1A9*4);Status3 = RT_ReadReg(rt1553B_map_base1,0x480*4);Status4 = RT_ReadReg(rt1553B_map_base1,0x481*4);if(Status1 != 0x4200){cnterror++;printf("read error %d! error value is 0x%x,error cnt is%d\n",i,Status1,cnterror);}if(Status2 != 0x4100){cnterror++;printf("read error %d! error value is 0x%x,error cnt is%d\n",i,Status2,cnterror);}if(Status2 != 0xf102){cnterror++;printf("read error %d! error value is 0x%x,error cnt is%d\n",i,Status3,cnterror);}if(Status2 != 0xf103){cnterror++;printf("read error %d! error value is 0x%x,error cnt is%d\n",i,Status4,cnterror);}cntok ++;//printf("%d read ok,value is 0x%x\n",i,Status); }   if(cntok == 10000000)printf("10000000 success\n");
}
*/

rt.h

#ifndef __RT_H_
#define __RT_H_#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>/* *Define all register macros*Some commonly used judgment values*/
#define BUINTMASK                       0x0              //reg0
#define BUCFG1                          0x1
#define BUCFG2                          0x2
#define BURST                           0x3
#define BUCMDSTACKPOINT                 0x3
#define BURTSUBADDRCTRL                 0x4
#define BUTIMETAG                       0x5
#define BUINTSTATUS                     0x6
#define BUCFG3                          0x7
#define BUCFG4                          0x8
#define BUCFG5                          0x9
#define BURTDATASTACKADDR               0xa
#define BUBCFRAMETIME                   0xb
#define BUBCTIMEREMAIN                  0xc
#define BURTLASTCMD                     0xd
#define BURTSTATUSWORD                  0xe
#define BURTBITWORD                     0xf
#define BUTSTMODE0                      0x10
#define BUTSTMODE1                      0x11
#define BUTSTMODE2                      0x12
#define BUTSTMODE3                      0x13
#define BUTSTMODE4                      0x14
#define BUTSTMODE5                      0x15
#define BUTSTMODE6                      0x16
#define BUTSTMODE7                      0x17            //reg17
#define BUMSGDATANUM                    0x20            //1553 message data size 32
#define BUCHANNELA                      0x0
#define BUCHANNELB                      0x1
#define BURX                            0x0
#define BUTX                            0x1
#define ERR1                            0x0
#define ERR3                            0x1
#define ERR                             0x2
#define OK                              0x0
#define INTMASK                         0x0
#define BUM400                          0x400           //data block 13  
#define BUM800                          0x800           //data block 37  
#define BUZERO                          0x0//#define BUMSGDATANUM                    0x40            //1553 message data size 32 word
#define BUMSGDATANUM                    0x20#define BUSUBADDR0                      0x0
#define BUSUBADDR31                     0x20            //1553 subaddress 31
#define BUMSGBUFSIZE                    0x40            //1553 message buffer size 64#define BUEOMINT                        0x1             //
#define BUMSGBUFBGN                     0x0             //1553 message buffer begin 0
#define BusCheckRespAddr                      1               //subaddress
#define SelfCheckAndUpdateCtrlRespAddr        3
#define StatusCheckAndUpdateDataGroupRespAddr 4
#define UpdateBlock1Addr                      5
#define UpdateBlock2Addr                      6
#define EndecryptRespAndUpdateBlock3Addr      7
#define UpdateBlock4Addr                      8
#define DdChannelSetRespAndUpdateBlock5Addr   9
#define UpdateBlock6Addr                      10
#define UpdateBlock7Addr                      11
#define UpdateBlock8Addr                      12
#define TransBookRespAddr                     15
#define DjChannelSetRespSysSetAddr            17
#define DxChannelSetRespAddr                  21
#define ForwardDataG2Addr                     24
#define DjChannelSetRespSelfCheckAddr         26#define XPAR_BRAM_0_BASEADDR 0x40000000                 //mem ctrl baseaddr
#define MEM_BASEADDR         0x43c00000                 //1553  baseaddr
unsigned char *rt1553B_map_base0;                               //mem ctrl baseaddr
unsigned char *rt1553B_map_base1;                               //1553  baseaddr/* *Define a structure for transmitting instructions*/
typedef struct{unsigned int channelAB;unsigned int blockStatusWord;unsigned int timeTagWord;unsigned int dataBlockPointer;unsigned int commandWord;unsigned int remoteTerminalAddr;unsigned int tr;unsigned int subAddModeCode;unsigned int dataCntModeCode;//unsigned char data[BUMSGDATANUM];unsigned int  data[BUMSGDATANUM];}BUMSGIFM;BUMSGIFM rt1553B_BUMSG;//消息// 
typedef struct{BUMSGIFM       buRxRPool[BUMSGBUFSIZE];unsigned int   buRxRPoint;BUMSGIFM       buRxTPool[BUMSGBUFSIZE];unsigned int   buRxTPoint;} BUBUFFER;//A read/write operation to memory
void Xil_Out32(unsigned int * Addr, unsigned int Value);
unsigned int * Xil_In32(unsigned int * Addr);
/* *To facilitate access to registers and memory, *the function of pointer manipulation is conveniently peak-decorated 
*/
#define RT_WriteReg(BaseAddress, RegOffset, Data)          \Xil_Out32((BaseAddress) + (RegOffset), (Data))
#define RT_ReadReg(BaseAddress, RegOffset)             \Xil_In32((BaseAddress) + (RegOffset))#define MEM_Write(BaseAddress, RegOffset, Data)          \Xil_Out32((BaseAddress) + (RegOffset), (Data))
//#define MEM_Read(BaseAddress, RegOffset)             \//   Xil_In32((BaseAddress) + (RegOffset))extern unsigned int MEM_Read(BaseAddress, RegOffset);
/**Memory mapping to 1553 *To facilitate enablement and manipulation of registers*@param[in] none*return 0
*/
int rt1553open();
/* *For the initialization configuration of registers and memory,*please refer to the comments for details*@param[in] none*return 0*/
int rt1553init();
/* *Print out all register values to help better determine the current state*@param[in] none*return 0*/
int showreg(); 
/* *Used to make a judgment on the receiving or sending of RT*In fact, the configuration is already done in the rt1553init();, *and the purpose of this function is only to print the send/receive data word in the absence of BM*Print the data word received when the BC-RT message is received*RT-BC prints out the data word sent*@param[in] none*return 0*/
unsigned int rt1553B_handle();
/* *Data word reception for 1553B*Stores the received data word in the specified data block after the mode selection, *and returns twice the received length to the protocol layer*@param[in] none*return tempVar(length)*/
unsigned int rt1553B_rcv();
/* *Data word for 1553B sending*The pre-set instructions are filled into the fixed data block area,*and the data words stored in the existing specified data block area are sent to BC *at the first time when receiving the sending signal*@param[in] buf send buffer*@param[in] send_len*@param[in] subaddr*return 0*/
unsigned int rt1553B_send(unsigned char *buf,int send_len,unsigned char subaddr);#endif

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

解决for循环中异步请求顺序不一致的问题

解决for循环中异步请求顺序不一致的问题参考文章&#xff1a; &#xff08;1&#xff09;解决for循环中异步请求顺序不一致的问题 &#xff08;2&#xff09;https://www.cnblogs.com/mo3408/p/12163012.html 备忘一下。...

可以ping通网关,dns。但是死活不能上网????怎么回事?

苹果电脑重装了一把win7系统。连接手机热点没问题&#xff0c;连接店里wifi也没问题。但是呢连接家里wifi死活不能上网&#xff01;&#xff01;&#xff01; 各种网上搜索啊&#xff0c;花了三四个小时&#xff0c;找到了各种解决方法&#xff0c;比如什么winsock reset还有什…...

python3中 下载wechatpy后 没有 work模块

1、 环境 win10 2、python3.6 3、wechatpy 最新版本 4、python3 中安装 wechatpy 模块后找不到 work模块 5、错误如下&#xff1a; ModuleNotFoundError: No module named wechatpy.work 这个错误明显是找不到wechatpy.work这个模块 6、查看wechatpy 使用文档 &#x…...

机器学习----支撑向量机(SVM)

SVM 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 图中是一个样本空间&#xff0c;里面有一些样本点&#xff0c;分成红色和蓝色两类。 逻辑回归是要找到一根决策边界&#xff0c;由决策边界把数据分成两类。但可能存在这样一些数据&#xff08;下图&…...

Spring都没弄明白凭什么拿高薪?真香系列

正文 二叉树 由 n&#xff08; n > 0&#xff09;个有限节点组成一个具有层次关系的集合&#xff0c;看起来就像一个倒挂的树&#xff0c;因此称这样的数据结构为树。 一个节点的子节点个数叫做度&#xff0c;通俗的讲就是树叉的个数。树中最大的度叫做树的度&#xff0c…...

一天一道ctf 第36天

[NPUCTF2020]ReadlezPHP 点进源码发现/time.php?source&#xff0c;访问一下得到 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public functi…...

从空间角度研究类,类与类之间的关系

class A:address 西安def __init__(self,name):self.name namedef func(self):if self.name dsb:self.skins jlfdef func1(self):print(self.__dict__)A.aaa ysh# obj A(dsb) # 类外面可以给对象封装属性 # respons input(sbs) # if respons s: # obj.wepon AWM #…...

dockerfile的详细介绍

Dockerfile 关键字作用备注FROM指定父镜像指定dockerfile基于那个image构建MAINTAINER作者信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh…...

nacos心跳

轮询 概括来说是服务端定时主动的去与要监控状态的客户端&#xff08;或者叫其他系统&#xff09;通信&#xff0c;询问当前的某种状态&#xff0c;客户端返回状态信息&#xff0c;客户端没有返回或返回错误、失效信息、则认为客户端已经宕机&#xff0c;然后服务端自己内部把这…...

408数据结构I 数据结构的基本概念

数据结构的基本概念 数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合&#xff0c;数据是计算机程序加工的原料。 数据元素 是数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理。 数…...

C语言实现学生成绩管理系统(Easy图形界面)

我的小站——半生瓜のblog 代码文件下载链接——链接 学生成绩管理系统学生成绩管理系统效果图流程&注意要点代码实现学生成绩管理系统 效果图 流程&注意要点 核心部分——EasyX显示图形界面&#xff0c;结构体数组和文件操作负责对数据进行各种操作。只要一进去程序…...

Unity常见合批失败

测试的时候注意两点&#xff1a; 1 运行起来编辑器在看结果 2 多用framedebuger 3 framedebuger观测结果时主要注意Shadows.RenderShadowMap中的Shadows.RenderJobDir和RenderForward.RenderLoopJob。可以看出来合批主要是在这两个函数中实现作用&#xff0c;分别是描画阴影…...

delphi:临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别

临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别 TRtlCriticalSection 是一个结构体&#xff0c;在windows单元中定义&#xff1b; 是InitializeCriticalSection&#xff0c;EnterCriticalSection&#xff0c;LeaveCriticalSection, DeleteCriticalSection…...

Linux使用命令行工具管理用户和组

文章目录一、管理用户账户1.查看用户账户2.添加用户账户3.管理用户账户密码4.修改用户账户5.删除用户账户二、管理组账户1.创建组账户2.修改组账户3.删除组账户4.管理组成员一、管理用户账户 1.查看用户账户 Linux没有直接查看用户列表的命令&#xff0c;但是可以查看用户配置…...

直面秋招!花了6个月肝完阿里技术官的笔记

2. ZooKeeper 介绍 2.1. ZooKeeper 由来 正式介绍 ZooKeeper 之前&#xff0c;我们先来看看 ZooKeeper 的由来&#xff0c;还挺有意思的。 下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节&#xff0c;推荐大家阅读一下&#xff1a; ZooKeeper 最早起源于雅虎研究院…...

K-means笔记

K-means算法 算法过程&#xff1a; 从N个样本数据中随机选取K个对象作为初始的聚类中心。分别计算每个样本到这各个聚类中心的距离&#xff0c;并将对象归于距离最短的聚类群中。所有样本计算完后&#xff0c;重新计算K个聚类中心。与前一次计算得到得聚类中心比较。如果聚类中…...

2021制造业数字化案例大会暨探营海尔数字化创新”在青岛盛大开幕

5月29日&#xff0c;“2021制造业数字化案例大会暨探营海尔数字化创新”活动在青岛成功举办。本次活动由由数字产业创新研究中心主办&#xff0c;锦囊专家、首席数字官、承办&#xff0c;海尔集团、山东省CIO联盟、青岛CIO联盟协办&#xff0c;邀请海尔集团的多位数字化高管和十…...

2021牛客暑期多校训练营5

B、Boxes 题目大意 你有nnn个盒子&#xff0c;每个盒子内存在可能有黑球和白球中的一种&#xff0c;打开每个盒子都有一个代价wiw_iwi​&#xff0c;你还有一次询问裁判的机会&#xff0c;当然询问裁判代价为CCC&#xff0c;你需要告诉裁判这nnn个盒子每个盒子里面的球颜色&a…...

MySQL数据库从小白到小菜04

MySQL数据库从小白到小菜04MySQL进阶补充插入聚合查询COUNTSUMAVGMAXMINGROUP BYHAVING联合查询内连接外连接MySQL进阶补充 插入 在表中插入数据时用的是INSERT&#xff0c;在MySQL中&#xff0c;是可以插入(查找结果表)的数据&#xff0c;但是结果表每一列的顺序类型都必须与…...

Linux高级存储管理

Linux高级存储管理1.lvm定义1.1 逻辑卷2.lvm的建立3.lvm的拉伸4. lvm缩减5.lvm快照6.lvm设备的删除7.管理vdo设备1.lvm定义 1.1 逻辑卷 逻辑卷主要适用于解决存储空间扩展问题&#xff0c;逻辑卷可以利用软件实现无限扩展。LVM可以实现把新的物理分区重组成物理卷&#xff0c…...

flink 小技巧记录

一、背景 flink做etl、大宽表、统计过程中有些小细节可以尝试优化&#xff0c;这里简单记录下&#xff1a; 二、场景 2.1 允许延迟的数据同步。比如线上订单库binlog同步到查询库&#xff0c;或者简单处理进入分析库&#xff0c;让分析师直接查询明细. 如果吞吐要求大一点&…...

Zookeeper源码查看: 七. 客户端启动源码

客户端启动源码 查看启动脚本 查看 zkCli.sh, 在 zkCli.sh 启动 Zookeeper 时, 会调用 ZooKeeperMain.java 创建 ZookeeperAdmin 查看启动类 ZookeeperMain 查看 ZookeeperMain 构造方法 查看 connectToZK() 方法 初始化监听器 查看 ZookeeperAdmin 类 解析连接地址…...

关于环境变量定义prompt实现$替换成用户+当前路径提示

set prompt "// ${HOST}:$cwd % " alias cd cd \!* ;set prompt "// ${HOST}:$cwd % "...

jspdf本地运行环境正常,打包后下载的pdf不全

最近开发过程中遇到个问题&#xff0c;用jspdf配合html2canvas把页面元素下载为pdf文件&#xff0c;在本地运行环境好好的&#xff0c;但是打包之后下载的pdf就是不全的&#xff0c;搜了好久也没找出什么对症的解决方案。 现象就是这样&#xff1a; 正常的文件&#xff1a; 有…...

LCD驱动芯片工厂,稳定提供高抗干扰超低功耗芯片2C23适用于水电气表以及工控仪表类驱动IC

容&#xff1a; VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高…...

5个实用提速深度学习模型的方法

您是否通过深度学习模型获得了良好的准确性&#xff0c;却发现推理时间不足以部署到生产环境中&#xff1f;您是否对如何优化模型的推理速度迷失了方向&#xff1f;那么这篇文章是给你的。众所周知&#xff0c;数据科学项目有一个奇特的特性&#xff0c;即项目者需要不断转换关…...

易-----

易 本人00后&#xff0c;近期在学子平、八字命理、易经玄学方面&#xff0c;如也是玄学爱好者&#xff0c;可以加联系方式一起讨论、学习&#xff0c;年龄相仿更好。 微信&#xff1a;1783176946 事实上还有两种《易经》&#xff0c;一种叫《连山易》&#xff0c;一种叫《归藏…...

ssh爆破获取用户密码

通过nmap扫描目标主机发现ssh版本为OpenSSH 5.3&#xff0c;有漏洞 漏洞影响版本&#xff08;OpenSSH < 8.3p1&#xff09; 使用msfconsole 工具 search ssh #查找有关ssh的漏洞 找到并使用漏洞use auxiliary/scanner/ssh/ssh_login show options #查看此漏…...

从青铜到王者的路线,6年菜鸟开发面试字节跳动Android研发岗,移动架构师成长路线

前言 今天我给大家再次分享一下&#xff0c;我最近的一些读书的感想&#xff0c;思考起来&#xff0c;确实能够给自己带来一些真实的帮助和启发&#xff0c;希望大家在平时的工作学习中&#xff0c;也能够认清楚学习的一些本质。 如果我们的学习是在不断掌握应对具体工作场景…...

从入门到精通!一个三非渣本的Android校招秋招之路,终局之战

前言: 本文收集整理了各大厂常见面试题N道&#xff0c;你想要的这里都有内容涵盖&#xff1a;Java 相关、Android 基础、Android Framework、三方源码、算法与数据结构、等技术栈&#xff0c;希望大家都能找到适合自己的公司&#xff0c;开开心心的撸代码。 实现方案 直接依…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

差生的 8 年程序员总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff0c;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记…...

刷爆全网:一个中科大差生的8年程序员工作总结~

编辑 | JavaGuide来源 | 陈小房前言今年终于从大菊花厂离职了&#xff0c;离职前收入大概 60w 不到吧&#xff01;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近 8 年的程序员工作做个总结复盘。近 8 年有些事情做对了&#xff0…...

百胜中国门店数突破一万家;山姆中国第28家门店在昆山开业 | 美通企业日报...

今日看点百胜中国门店突破10,000家&#xff0c;保持快速线上线下扩张增长势头。第1万家店在海南博鳌的肯德基餐厅开业。自1987年进入中国&#xff0c;百胜中国已发展成为中国最大的餐饮公司&#xff08;按系统销售额计&#xff09;&#xff0c;这是公司发展历史上一个重要的里程…...

内江计算机职业学校有哪些,内江第二计算机职业中学有哪些专业

很多的家长是希望自己的孩子有一个好的前程&#xff0c;但好的前程是受很多要素影响的&#xff0c;不只仅是学习成果好就行的&#xff0c;还应该在专业范畴有一定的知名度。那么&#xff0c;下面一同来了解下内江市第二计算机职业中学的招生专业。内江市第二计算机职业中学开设…...

计算机等级考试昆山报名点,江苏计算机等级考试报名地点

江苏计算机等级考试报名地点分类&#xff1a;计算机等级|更新时间&#xff1a;2016-07-07|来源&#xff1a;原创2010年下半年全国计算机等级考试时间是2010年9月18日至22日&#xff0c;第一天上午考笔试&#xff0c;上机考试从笔试的当天下午开始(一级从上午开始)。2010年下半年…...

河南商丘虞城县计算机学校,虞城县第一中等专业学校

更新日期&#xff1a;2021-07-01 17:53学校类型&#xff1a;公办学校河南省重点中等专业学校教学领域&#xff1a;--电 话&#xff1a;0370-4129668 18236363721官网&#xff1a; www.ycxyzg.com学校地址&#xff1a; 河南省商丘市虞城县黄河路南段招生专业学校现有38个教学…...

剑指Offer07.重建二叉树_解题思路代码实现

一、题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 二、示例输入输出 示例1&#xff1a; Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9…...

威海职业学院与云哟科技联合 树“新基建”电竞教育行业新标杆

“新基建”是深入各个行业的基础设施。杭州云哟科技有限责任公司是新西兰数字经济发展基金会在中国的高科技生态企业&#xff0c;在边缘计算、5G应用等方面有多年的技术沉淀与商业基础。云哟科技5G边缘计算电子竞技教育培训行业的落地应用今日开花结果。 杭州云哟科技有限责任公…...

计算机电竞学院就业方向,电竞专业主要是学什么的 有前途吗

电竞专业主要学习电竞技术、概论、裁判、赛事组织策划等。电竞专业主要学习电竞技术、概论、裁判、赛事组织策划等。电子竞技专业的理论课程方面&#xff0c;除了思想政治、英语、计算机等大学必修课&#xff0c;数娱方向的学生还将学习“游戏概论”等专业课以及与策划相关的基…...