232转USB读取数据正确,但485转USB读取数据出错,用调试助手都可以正常接收数据。

用485转USB读取数据有时候正确,有时候乱码。硬件应该没有问题,用调试工具可以正确接收数据。 本人使用的是控件编写的测试程序,,,实在不行用API编写不知道会不会有同样情况。。求大神指导。。。

    variant_inp = m_ctrlComm.GetInput();
    safearray_inp = variant_inp;
    len = safearray_inp.GetOneDimSize();
    for(k = 0;k<len;k++)
    {
        safearray_inp.GetElement(&k,rxdata+k);      } 

这是接收并转换数据的代码。。我debug了,就是从缓存区取出数据出错了,所以会不会是这段代码有问题。。。。。用232串口这段代码是可以正确的转换的。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用ADXL345加速度传感器读取数据

亲们,我用pc读取加速度数据采集,usb转串口是cp2102模块,怎么实现加速度数据采集读取啊,谢谢你们,

kali读取光盘错误!!

我用U盘安装kali就是卡在读取错误哪里,是了各种方法都不行。有人知道解决方案吗?

alsa架构的usb麦克风在linux下读不到数据!!

最近项目买了一个USB摄像头带mic的小设备,在windows下设备测试没有问题,但是虚拟机下用ubuntu自带的系统声音测试时,可以识别设备音量却一直为0,在/proc/asound/card1里面也能看到设备正在runing,但就是没有声音。然后自己写了个小程序自己设置采集参数也读不到声音,卡在snd_pcm_read函数就不动了,也不返回结果。虚拟机读取笔记本自带的麦克没有问题。哪位碰到过这个问题的朋友能帮我指点一下呢?

fats文件系统中,用f_read函数读取数据存在的问题。

uint16_t buff[4096] = {0}; uint32_t ReadBuff[1024] = {0}; void Play(void) { static uint32_t j = 0; static uint32_t i = 0; f_mount(&fs,"0:",1); res = f_open(&fdst,"0:/music.wav",FA_READ); if(res==FR_OK) { brw = 0; while(1) { res = f_read(&fdst,ReadBuff,sizeof(ReadBuff),&brw) if(res||brw==0) break; while(ReadBuff[i]!='\0') { buff[j] = (u8)(ReadBuff[i]); j++; buff[j] = (u8)(ReadBuff[i]>>8); j++; buff[j] = (u8)(ReadBuff[i]>>16); j++; buff[j] = (u8)(ReadBuff[i]>>24); j++; i++; } i = 0; j = 0; //startup_DMA((u32 DAC_ADRSS,u8 BuffSize )); memset(ReadBuff,0,sizeof(ReadBuff)); menmset(buff,0,sizeof(buff)); } f_close(&fdst); } } 从SD卡中读取.wav文件,然后把数据传到DAC输出。因为f_read读出是uint型的,所以我要转成uint16_t。我的.wav文件大小有20k左右,依据上面给数组分配的大小,我需要连续读几次才能完成,但是存在如下的问题: 如果我定义buff的大小>.wav文件的大小,f_read函数就可以连续几次读出数据。但是像我上面所定义uint16_t buff[4096]的话,f_read只读了一次4096字节,第二次读取的时候就返回错误09,怎么回事呢? 难道数组buff的大小会影响到 f_read函数?还是我读完之后立即把uint32_t 转 uint16_t所影响的?

USB打印机 VC编程ReadFile 出错

各位高手,请教个USB打印机读取数据异常的问题:USB打印机是USB Printing Support 类,我用CreateFile、WriteFile、ReadFile对打印机进行读写操作,WriteFile正常,但是ReadFile后GetLastError返回的是6,即句柄无效;这是什么情况?

c#用serialport进行的串口数据接收,遇到了问题,求大神指点

运行后再richtextbox1中只显示一个数,例如:33 随后会报错:对象未引用到对象的实例,点了关闭后又会出现一个数据,例如31,之后又会报错,如此循环,而且数据不太对。 整了好久了,希望能帮帮忙,第一次做这,谢谢!! 代码: namespace yfy_串口调试 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /****************************设置变量******************************/ public string[] strArray; public SerialPort sp1 = new SerialPort(); public Byte[] mydata; public int mydatalength; //这个数的值是由接收到的字节长度决定的,并且作为mydata的长度,如果索引值还超过数组定义值,就应该是接收问题。 public int zhengfu = 2, now_x = 30; public static Bitmap bmp = new Bitmap(500,350); public Graphics gph = Graphics.FromImage(bmp); public char name_image='A'; /*****************************相关函数****************************/ public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)//数据接收函数 { if (sp1.IsOpen==true ) //为了严谨性,加上检查串口是否被打开 { if (rbRcv16.Checked == true) //接收16进制按钮 { try { int average_speed = 0; //设置初始平均速度 Byte[] receivedData = new Byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer mydatalength = receivedData.Length; for (int i = 0; i < receivedData.Length; i++) //窗体显示 { richTextBox1.Text = receivedData[i].ToString("X2"); //16进制显示在接受栏 mydata[i] = receivedData[i]; richTextBox1.Text += ","; //让每个数据都隔开 average_speed += receivedData[i]; } textBox1.Text = (average_speed / receivedData.Length).ToString("X2"); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); } } } else { MessageBox.Show("请打开某个串口或者没有选中16进制接收", "错误提示"); } } private void Form1_Load(object sender, EventArgs e)//页面初始化 { Control.CheckForIllegalCrossThreadCalls = false; //强制不检查线程 sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托 sp1.ReceivedBytesThreshold =1; //当缓冲区的字节数为x时,触发datareceive事件 //检查是否有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "Error!"); return; } //添加串口项目 foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Items.Add(s); //获取有COM口 } rbRcv16.Checked = true; //接收数据按16进制进行 } private void btnSwitch_Click(object sender, EventArgs e)//设置串口 { if (sp1.IsOpen == false) { try { string serialName = cbSerial.SelectedItem.ToString();//读取串口号 sp1.PortName = serialName; //设置串口号 sp1.BaudRate = 9600; //波特率 sp1.DataBits = 8; //数据位 sp1.StopBits = StopBits.One; //停止位 sp1.Parity = Parity.None; //校验位 sp1.Open(); //打开串口 btnSwitch.Text = "关闭串口"; } catch (System.Exception ex) { MessageBox.Show("Error:" + ex.Message, "Error"); return; } } else { sp1.Close(); //关闭串口 btnSwitch.Text = "打开串口"; } }

opencv打开外置USB摄像头出现问题,请问是怎么回事

出现的错误见图片,程序中断后就停在那了![![图片说明](https://img-ask.csdn.net/upload/201707/21/1500622369_348965.png)图片说明](https://img-ask.csdn.net/upload/201707/21/1500622360_134663.png) ![图片说明](https://img-ask.csdn.net/upload/201707/21/1500622578_799941.png) 完整程序如下: ``` #include <cstdio> #include <cv.h> #include <highgui.h> #include<iostream> using namespace std; using namespace cv; int main() { IplImage *frame = NULL; IplImage *pDstImg = NULL; CvCapture *capture1 = cvCaptureFromCAM(1); cvSetCaptureProperty(capture1 , CV_CAP_PROP_FRAME_WIDTH , 320); //寻找膛口质心时获取像素较少的图片 cvSetCaptureProperty(capture1 , CV_CAP_PROP_FRAME_HEIGHT , 240); char fileName[100]; char key; int count = 0; waitKey(3000); while(1) { frame = cvQueryFrame(capture1); pDstImg = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3); /*****添加的程序段:将图像画面旋转180度--仿射变换****/ double angle = 180; CvPoint2D32f center = cvPoint2D32f(frame->width/2.f,frame->height/2.f); float m[6]; CvMat map_matrix = cvMat( 2, 3, CV_32F,m); cv2DRotationMatrix(center,angle,1.0,&map_matrix); cvWarpAffine (frame, pDstImg, &map_matrix); cvCopy(pDstImg, frame); /****到此为止****/ cvFlip(frame, NULL, 1); //水平翻转图像,像照镜子一样,不想要这个效果可以去掉此句 key = cvWaitKey(50); if(key == 27) break; //按ESC键退出程序 if(key == 'p') //按p键拍照 { sprintf(fileName, "Picture %d.jpg", ++count); //生成文件名 cvSaveImage(fileName, frame); cvXorS(frame, cvScalarAll(255), frame); //将拍到的图像反色(闪一下形成拍照效果) cvShowImage("相机",frame); cvWaitKey(10); //反色图像显示ms } cvShowImage("相机",frame); // cvShowImage("相机",pDstImg); } cvReleaseCapture(&capture1); return 0; } ``` ,这个程序之前还能用的,今天运行就出现这个问题了,

Help!!! libusb 调用libusb_control_transfer 出错,返回-9

linux下写了一个程序,给一个Usb设备发送数据,用的libusb的 libusb_control_transfer函数,如下 r = libusb_control_transfer(handle, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, 0x04, 0x07, 0, (unsigned char*)lpBuffer, nNum berOfBytesToWrite, 0); 返回值为-9,进去看了下是, /** Pipe error */ LIBUSB_ERROR_PIPE = -9, 关于这个函数,在网上也没看到具体分析其返回值,参数等等的,我是按照网上的例子写的,同样调用这个函数 读取数据没错,不知道原因,求大神Help

x210板子用USB启动时候secureCRT出错 板子用SD卡启动时候正常

![图片说明](https://img-ask.csdn.net/upload/201709/09/1504933180_794374.png)x210板子用USB启动时候secureCRT 显示uart negotiation error 板子用SD卡启动时候正常

串口和串口轉usb的區別

圖一: ![知道串口轉usb](https://img-ask.csdn.net/upload/201811/22/1542851006_844269.png) 圖二: ![這是串口的](https://img-ask.csdn.net/upload/201811/22/1542851037_642924.png) # **提問:圖一圖二可不可以都用下面的代碼獲取數據:(圖二可以用下面的代碼獲取數據,但是圖一不知道行不行,請各位大佬路過看看)** ``` package com.lyf.test2; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Label; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane; import com.lyf.test2.SerialTool; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import serialException.ExceptionWriter; import serialException.NoSuchPort; import serialException.NotASerialPort; import serialException.PortInUse; import serialException.ReadDataFromSerialPortFailure; import serialException.SendDataToSerialPortFailure; import serialException.SerialPortInputStreamCloseFailure; import serialException.SerialPortOutputStreamCloseFailure; import serialException.SerialPortParameterFailure; import serialException.TooManyListeners; /** * 主程序 * @author zhong * */ public class Client extends Frame{ private static final long serialVersionUID = 1L; /** * 程序界面宽度 */ public static final int WIDTH = 800; /** * 程序界面高度 */ public static final int HEIGHT = 620; /** * 程序界面出现位置(横坐标) */ public static final int LOC_X = 200; /** * 程序界面出现位置(纵坐标) */ public static final int LOC_Y = 70; private static SerialPort serialPort = null; //保存串口对象 private Font font = new Font("微软雅黑", Font.BOLD, 25);//文本框字體 private Label weight = new Label("暫無數據", Label.CENTER); //重量 private Button saveButton = new Button("保存");//设置button按钮 Image offScreen = null; //用于双缓冲 //设置window的icon(这里我自定义了一下Windows窗口的icon图标,因为实在觉得哪个小咖啡图标不好看 = =) Toolkit toolKit = getToolkit();//返回此窗体的工具包 Image icon = toolKit.getImage(Client.class.getResource("computer.png"));//獲取當前類所在的包下面的圖片 /** * 主方法 * @param args * @throws SerialPortOutputStreamCloseFailure * @throws SendDataToSerialPortFailure * @throws PortInUse * @throws NoSuchPort * @throws NotASerialPort * @throws SerialPortParameterFailure */ public static void main(String[] args) throws SendDataToSerialPortFailure, SerialPortOutputStreamCloseFailure, SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { new Client().launchFrame(); } /** * 主菜单窗口显示; * 添加Label、按钮、下拉条及相关事件监听; */ public void launchFrame() { this.setBounds(LOC_X, LOC_Y, WIDTH, HEIGHT); this.setTitle("CDIO工程项目"); this.setIconImage(icon); this.setBackground(Color.white); this.setLayout(null); //改變按鈕的事件监听 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { if (serialPort != null) { //程序退出时关闭串口释放资源 SerialTool.closePort(serialPort); } System.exit(0); } }); //设置文本框位置、背景颜色、是否粗体、字体颜色 weight.setBounds(140, 103, 225, 50); weight.setBackground(Color.black); weight.setFont(font); weight.setForeground(Color.white); add(weight); //添加保存按钮 saveButton.setBounds(250, 490, 300, 50); saveButton.setBackground(Color.lightGray); saveButton.setFont(new Font("微软雅黑", Font.BOLD, 20)); saveButton.setForeground(Color.darkGray); add(saveButton); //添加打开串口按钮的事件监听 try { //指定端口名及波特率的串口对象 serialPort = SerialTool.openPort("COM1", 4800); //在该串口对象上添加监听器 SerialTool.addListener(serialPort, new SerialListener()); } catch (SerialPortParameterFailure | NotASerialPort | NoSuchPort | PortInUse | TooManyListeners e1) { //发生错误时使用一个Dialog提示具体的错误信息 JOptionPane.showMessageDialog(null, e1, "错误", JOptionPane.INFORMATION_MESSAGE); } this.setResizable(false);//设置此框架是否可由用户调整大小。 this.setVisible(true); //显示窗口 new Thread(new RepaintThread()).start(); //启动重画线程 } /** * 画出主界面组件元素 * 设置button的字体颜色、设置字体样式 是否粗体 字体大小、文本、位置 */ public void paint(Graphics g) { g.setColor(Color.black); g.setFont(new Font("微软雅黑", Font.BOLD, 25)); g.drawString(" 重量: ", 45, 130); } /** * 双缓冲方式重画界面各元素组件 */ public void update(Graphics g) { if (offScreen == null) offScreen = this.createImage(WIDTH, HEIGHT); Graphics gOffScreen = offScreen.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.white); gOffScreen.fillRect(0, 0, WIDTH, HEIGHT); //重画背景画布 this.paint(gOffScreen); //重画界面元素 gOffScreen.setColor(c); g.drawImage(offScreen, 0, 0, null); //将新画好的画布“贴”在原画布上 } /** * 以内部类形式创建一个串口监听类 * @author zhong * */ private class SerialListener implements SerialPortEventListener { /** * 处理监控到的串口事件 */ public void serialEvent(SerialPortEvent serialPortEvent) { try { // 等待1秒钟让串口把数据全部接收后在处理 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: // 10 通讯中断 JOptionPane.showMessageDialog(null, "与串口设备通讯中断", "错误", JOptionPane.INFORMATION_MESSAGE); break; case SerialPortEvent.OE: // 7 溢位(溢出)错误 case SerialPortEvent.FE: // 9 帧错误 case SerialPortEvent.PE: // 8 奇偶校验错误 case SerialPortEvent.CD: // 6 载波检测 case SerialPortEvent.CTS: // 3 清除待发送数据 case SerialPortEvent.DSR: // 4 待发送数据准备好了 case SerialPortEvent.RI: // 5 振铃指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空 break; case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据 byte[] data = null; try { if (serialPort == null) {//判断串口对象是否为空 JOptionPane.showMessageDialog(null, "串口对象为空!监听失败!", "错误", JOptionPane.INFORMATION_MESSAGE); }else { data = SerialTool.readFromPort(serialPort); //读取数据,存入字节数组 //System.out.println(new String(data)); //自定义解析过程 if (data != null && data.length > 1) { //检查数据是否读取正确 try { weight.setText(new String(data) + " g"); } catch (ArrayIndexOutOfBoundsException e) { JOptionPane.showMessageDialog(null, "数据解析过程出错,更新界面数据失败!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } }else { JOptionPane.showMessageDialog(null, "读取数据过程中未获取到有效数据!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } catch (ReadDataFromSerialPortFailure | SerialPortInputStreamCloseFailure e) { JOptionPane.showMessageDialog(null, e, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); //发生读取错误时显示错误信息后退出系统 } break; } } } /** * 重画线程(每隔30毫秒重画一次) */ private class RepaintThread implements Runnable { public void run() { while(true) { //调用重画方法 repaint(); try { Thread.sleep(30); } catch (InterruptedException e) { String err = ExceptionWriter.getErrorInfoFromException(e); JOptionPane.showMessageDialog(null, err, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } } } ``` ``` package com.lyf.test2; import java.io.IOException; import java.io.InputStream; import java.util.TooManyListenersException; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; import serialException.*; /** * 串口服务类,提供打开、关闭串口,读取、发送串口数据等服务(采用单例设计模式) * @author zhong * */ public class SerialTool { private static SerialTool serialTool = null; static { //在该类被ClassLoader加载时就初始化一个SerialTool对象 if (serialTool == null) { serialTool = new SerialTool(); } } //私有化SerialTool类的构造方法,不允许其他类生成SerialTool对象 private SerialTool() {} /** * 获取提供服务的SerialTool对象 * @return serialTool */ public static SerialTool getSerialTool() { if (serialTool == null) { serialTool = new SerialTool(); } return serialTool; } /** * 打开串口 * @param portName 端口名称 * @param baudrate 波特率 * @return 串口对象 * @throws SerialPortParameterFailure 设置串口参数失败 * @throws NotASerialPort 端口指向设备不是串口类型 * @throws NoSuchPort 没有该端口对应的串口设备 * @throws PortInUse 端口已被占用 */ public static final SerialPort openPort(String portName, int baudrate) throws SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { try { //通过端口名识别端口 CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); //打开端口,并给端口名字和一个timeout(打开操作的超时时间) CommPort commPort = portIdentifier.open(portName, 2000); //判断是不是串口 if (commPort instanceof SerialPort) { SerialPort serialPort = (SerialPort) commPort; try { //设置一下串口的波特率等参数 serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { throw new SerialPortParameterFailure(); } //System.out.println("Open " + portName + " sucessfully !"); return serialPort; } else { //不是串口 throw new NotASerialPort(); } } catch (NoSuchPortException e1) { throw new NoSuchPort(); } catch (PortInUseException e2) { throw new PortInUse(); } } /** * 关闭串口 * @param serialport 待关闭的串口对象 */ public static void closePort(SerialPort serialPort) { if (serialPort != null) { serialPort.close(); serialPort = null; } } /** * 从串口读取数据 * @param serialPort 当前已建立连接的SerialPort对象 * @return 读取到的数据 * @throws ReadDataFromSerialPortFailure 从串口读取数据时出错 * @throws SerialPortInputStreamCloseFailure 关闭串口对象输入流出错 */ public static byte[] readFromPort(SerialPort serialPort) throws ReadDataFromSerialPortFailure, SerialPortInputStreamCloseFailure { InputStream in = null; byte[] bytes = null; try { in = serialPort.getInputStream();//取入数据 int bufflenth = in.available(); //获取buffer里的数据长度 while (bufflenth != 0) { bytes = new byte[bufflenth]; //初始化byte数组为buffer中数据的长度 in.read(bytes); bufflenth = in.available(); } } catch (IOException e) { throw new ReadDataFromSerialPortFailure(); } finally { try { if (in != null) { in.close(); in = null; } } catch(IOException e) { throw new SerialPortInputStreamCloseFailure(); } } return bytes; } /** * 添加监听器 * @param port 串口对象 * @param listener 串口监听器 * @throws TooManyListeners 监听类对象过多 */ public static void addListener(SerialPort port, SerialPortEventListener listener) throws TooManyListeners { try { //给串口添加监听器 port.addEventListener(listener); //设置当有数据到达时唤醒监听接收线程 port.notifyOnDataAvailable(true); //设置当通信中断时唤醒中断线程 port.notifyOnBreakInterrupt(true); } catch (TooManyListenersException e) { throw new TooManyListeners(); } } } ```

使用ffmpeg在安卓版打开usb摄像头,请问是什么原因造成的?

av_register_all(); avdevice_register_all(); const char* filename = "/dev/video0"; AVInputFormat *inputFmt = av_find_input_format ("video4linux2"); if( (ret = avformat_open_input(&format_ctx, filename, inputFmt, NULL)) < 0 ) { av_strerror(ret, err_msg, sizeof(err_msg) ); printf("Cann't open the file: %s\n", err_msg); return -1; } 使用avformat_open_input(&format_ctx, filename, inputFmt, NULL)方法打开摄像头的时候出错了,错误信息是:Cann't open the file: Not a typewriter 请问这是什么原因造成的? 在线等!

串口通信,如何解决拔插串口的问题

1,打开软件,连接好了串口 2,测试数据,有数据 3,拔掉串口 再插上串口(相当于丢失了串口) 4,不关闭软件,测试数据,没有数据 请问各位大神,怎么不关闭软件加载串口。在软件里面判断串口如果丢失了串口自动加载呢?

String index out of range: - 1输入读取问题?

小弟用processing做了一个有通讯功能的GUI介面,通讯模块接收到资料后,由TTL串口转USB传到计算机来,最后显示在UI上。引用了controlP5(GUI)与processing.serial(串口通讯)两个函式库。 现在的问题是想透过计算机再回传讯息到通讯模块,原本设定输入AT+HELP=1后会在UI上显示一些资讯,结果编程器却故障并收到错误"String index out of range: - 1"。上网看了一些帖子有提到字符串读取相关的问题,但是改了改还是出错,在这边因为代码有些太多就不全放了,只放我认为跟问题相关的部分,麻烦大佬们解惑了... ```java void controlEvent(ControlEvent field) { // String tmp = field.getStringValue(); char x = tmp.charAt(tmp.length()-1); if(tmp.indexOf(x)==-1){ println("nope.."); print(tmp.substring(0, tmp.lastIndexOf(x))); return; } else{ if(field.getName() == "send_back_APRS") APORT.write(tmp + "\n"); else if(field.getName() == "send_back_TT&C") TPORT.write(tmp); else if(field.getName() == "send_back_PM2.5") PPORT.write(tmp); else print("retransmitting failed!"); } } ```

usb cdc(通信设备类)在用vc++写上层应用程序时遇到问题?

USB写一个应用时调用SetupDiEnumDeviceInterfaces()这个函数出错. 因为是CDC通信(端口(COM和LPT))而不是HID通信, 所以用得是固定"安装类"的GUID,网上也有很多人提过这问题,但一直木有人解决, 求救呀, 搞了很久很久了... ``` GUID guidHID = {0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}; //安装类GUID是在inf驱动文件上的GUID //HidD_GetHidGuid( &guidHID ); //因为不是HID设备,所以不用这个来获得GUID, 而是用上面这个固定GUID HDEVINFO hDevInfo = SetupDiGetClassDevs( &guidHID, NULL, 0, DIGCF_PRESENT ); //由于是"安装类的GUID"而非"接口类GUID", 所以在最后一个参数没加DIGCF_DEVICEINTERFACE if( INVALID_HANDLE_VALUE != hDevInfo ) //调用成功返回文件句柄, 如果调用失败返回INVALID_HANDLE_VALUE { SP_DEVICE_INTERFACE_DATA strtInterfaceData = { sizeof(SP_DEVICE_INTERFACE_DATA) }; // 查找USB设备接口 for( DWORD index=0; SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,index,&strtInterfaceData); ++index ) //程序在这一步出错, 枚举老返回0,导致没法进行下一步了 { char buf[1000]; SP_DEVICE_INTERFACE_DETAIL_DATA& strtDetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA&)buf[0]; strtDetailData.cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); // 若找到了设备,则读取设备路径名 if( SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,&strtDetailData,_countof(buf),NULL,NULL) ) { _tprintf( _T("[%d] path: %s\n"), index, strtDetailData.DevicePath ); //设备路径名 //用CreateFile打开或创建设备 HANDLE hUsb = CreateFile( strtDetailData.DevicePath, GENERIC_READ|GENERIC_WRITE//0 , FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( INVALID_HANDLE_VALUE != hUsb ) //调用成功返回文件句柄, 如果调用失败返回INVALID_HANDLE_VALUE { // 查询设备标识 HIDD_ATTRIBUTES strtAttrib = { sizeof(HIDD_ATTRIBUTES) }; //用HidD_GetAttributes获得特定HID属性 if( HidD_GetAttributes(hUsb,&strtAttrib) ) { _tprintf( _T("VendorID : %hX\n"), strtAttrib.VendorID ); _tprintf( _T("ProductID: %hX\n"), strtAttrib.ProductID ); _tprintf( _T("VerNumber: %hX\n"), strtAttrib.VersionNumber ); if(strtAttrib.VendorID==0x3006 && strtAttrib.ProductID==0x1977) { _tprintf( _T("Find:VendorID-0x3006, ProductID-0x1977\n")); COMSTAT ComStat; DWORD dwErrorFlags; //ClearCommError(hUsb,&dwErrorFlags,&ComStat); //读写设备之前应先调用这个函数清除错误标志 BYTE pBuffer[8] = {0}; if( DeviceWrite(hUsb,pBuffer, 7) ) { for(int i=0;i<8;i++) { _tprintf( _T("Read: %02X"),pBuffer[i]); if(((i+1)%16)==0) { _tprintf( _T("\n")); } } } else { _tprintf( _T("Read error")); } } } else ShowError(); //释放资源 CloseHandle( hUsb ); } else ShowError(); } else ShowError(); } if( GetLastError() != ERROR_NO_MORE_ITEMS ) ShowError(); SetupDiDestroyDeviceInfoList( hDevInfo ); } else ShowError(); ```

串口校验位设置时校验位的匹配问题

我用windows上的串口调试助手和公司设备上的串口通信,串口调试助手设置为无校验时无法通信,设置为奇校验、偶校验、MARK校验,SPACE校验时都可以正常通信。当我用linux上的串口调试软件与公司的该设备通信时,串口调试软件设置为无校验时可以正常通信,这是为什么呢?百思不得其解,按道理应该只有一种校验能够通过,为什么在windows下除了无校验竟然都可以通过,而且为什么在linux下无校验却可以正常通信?

linux串口编程实现自收自发功能发送可以发出去read读取总是返回-1

实现的功能就是串口的自收自发功能我用的事ch340 ch340的u口连接到笔记本上 ch340的串口端的rx 和tx用杜邦线连接在一起就是这样了但是现在问题是编译完成后发送可以发出去但是读取总是失败read返回值总是-1不知道哪里出错了求大神们解答下 小弟拜谢 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> void set_speed(int, int); int main() { int fd,flag,wr_num=0,rd_num=0; struct termios term; speed_t baud_rate_i,baud_rate_o; char send_buf[]="hello,serial!",recv_buf[20]; fd=open("/dev/ttyUSB0",O_RDWR|O_NONBLOCK); if(fd==-1) printf("can not open the COM1!\n"); else printf("open COM1 ok!\n"); flag=tcgetattr(fd,&term); baud_rate_i=cfgetispeed(&term); baud_rate_o=cfgetospeed(&term); printf("杈撳叆娉㈢壒鐜囨槸%d锛岃緭鍑烘尝鐗圭巼鏄?d锛屾枃浠舵弿杩扮鏄?d\n",baud_rate_i,baud_rate_o,fd); set_speed(fd,9600); flag=tcgetattr(fd,&term); baud_rate_i=cfgetispeed(&term); baud_rate_o=cfgetospeed(&term); printf("杈撳叆娉㈢壒鐜囨槸%d锛岃緭鍑烘尝鐗圭巼鏄?d锛屾枃浠舵弿杩扮鏄?d\n",baud_rate_i,baud_rate_o,fd); while(1) { wr_num=write(fd,send_buf,sizeof(send_buf));/*鍏堝啓鍏?/ if(wr_num>0) { printf("write success!\n"); } else { printf("write fail!\n"); } sleep(1); rd_num=read(fd,recv_buf,sizeof(recv_buf));/*鍐嶈鍑?/ if(rd_num>0) { printf("we can read \"%s\" from the COM1.total:%d characters\n",recv_buf,rd_num); } else { printf("read fail!\n"); } sleep(2); } } int speed_arr[] = {B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, }; int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, }; void set_speed(int fd, int speed) { int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } } }

c++builder编译时出现以下错误,怎么解决?

c++builder编译时出现以下错误,怎么解决?做一个读取USB设备数据的程序,刚刚接触,不了解,希望神人解答,多谢!! //函数功能:枚举USB设备 int USBAsp_enum(void) { struct usb_bus *bus; struct usb_device *dev = 0; g_num = 0; usb_init(); usb_find_busses(); usb_find_devices(); for(bus=usb_get_busses()); bus; bus=bus->next) { for(dev=bus->devices; dev; dev=dev->next) { if((dev->descriptor.idVendor == USBDEV_VENDOR) && (dev->descriptor.idProduct == USBDEV_PRODUCT)) { if (g_num < DEVICE_MINOR) { g_list[g_num].udev = dev; //int i=dev->config->bNumInterfaces; g_num ++; } } } } return g_num; } //函数功能:打开USB bool USBAsp_open(void) { struct usb_bus *bus; struct usb_device *dev = 0; if(usbhandle!=NULL) { usb_close(usbhandle); usbhandle=NULL; } usb_init(); usb_find_busses(); usb_find_devices(); for(bus=usb_get_busses(); bus; bus=bus->next) { for(dev=bus->devices; dev; dev=dev->next) { if((dev->descriptor.idVendor == USBDEV_VENDOR) && (dev->descriptor.idProduct == USBDEV_PRODUCT)) break; } if(dev) break; } if(!dev) { usbhandle=NULL; return false; } usbhandle = usb_open(dev); if(!usbhandle) { ShowMessage("不能打开USB!"); usbhandle=NULL; return false; } usb_set_configuration(usbhandle, 1); //写数据前的初始化 usb_claim_interface(usbhandle, 0); InitializeCriticalSection(&m_CommunicationSyn); UsbRead = new Usb_Port(false); //挂起线程 IsRun=true; return true; } //函数功能:向USB写入数据 void __fastcall USBAsp_Write(unsigned char chStr[], unsigned int StrLen) { if(usbhandle) { usb_bulk_write(usbhandle,EP_Out,chStr,StrLen,150); } }//开个线程 读取数据 int RecvLength=usb_bulk_read(usbhandle,EP_In,RxBuff,2048,150); 出现以下错误 [C++ Error] Unit1.cpp(7): E2451 Undefined symbol 'g_num' [C++ Error] Unit1.cpp(8): E2268 Call to undefined function 'usb_init' [C++ Error] Unit1.cpp(9): E2268 Call to undefined function 'usb_find_busses' [C++ Error] Unit1.cpp(10): E2268 Call to undefined function 'usb_find_devices' [C++ Error] Unit1.cpp(11): E2268 Call to undefined function 'usb_get_busses' [C++ Error] Unit1.cpp(11): E2034 Cannot convert 'int' to 'usb_bus *' [C++ Error] Unit1.cpp(11): E2378 For statement missing ; [C++ Error] Unit1.cpp(13): E2315 'next' is not a member of 'usb_bus', because the type is not yet defined [C++ Error] Unit1.cpp(13): E2379 Statement missing ; [C++ Warning] Unit1.cpp(28): W8070 Function should return a value [C++ Warning] Unit1.cpp(28): W8004 'dev' is assigned a value that is never used [C++ Error] Unit1.cpp(35): E2451 Undefined symbol 'usbhandle' [C++ Error] Unit1.cpp(35): E2451 Undefined symbol 'NULL' [C++ Error] Unit1.cpp(37): E2268 Call to undefined function 'usb_close' [C++ Error] Unit1.cpp(40): E2268 Call to undefined function 'usb_init' [C++ Error] Unit1.cpp(41): E2268 Call to undefined function 'usb_find_busses' [C++ Error] Unit1.cpp(42): E2268 Call to undefined function 'usb_find_devices' [C++ Error] Unit1.cpp(43): E2268 Call to undefined function 'usb_get_busses' [C++ Error] Unit1.cpp(45): E2315 'next' is not a member of 'usb_bus', because the type is not yet defined [C++ Error] Unit1.cpp(47): E2315 'devices' is not a member of 'usb_bus', because the type is not yet defined [C++ Error] Unit1.cpp(47): E2315 'next' is not a member of 'usb_device', because the type is not yet defined [C++ Error] Unit1.cpp(49): E2315 'descriptor' is not a member of 'usb_device', because the type is not yet defined [C++ Error] Unit1.cpp(49): E2451 Undefined symbol 'USBDEV_VENDOR' [C++ Error] Unit1.cpp(49): E2315 'descriptor' is not a member of 'usb_device', because the type is not yet defined [C++ Error] Unit1.cpp(49): E2451 Undefined symbol 'USBDEV_PRODUCT' [C++ Error] Unit1.cpp(60): E2268 Call to undefined function 'usb_open' [C++ Error] Unit1.cpp(63): E2268 Call to undefined function 'ShowMessage' [C++ Error] Unit1.cpp(63): E2228 Too many error or warning messages

vc2010下串口函数返回值无效的问题(关闭后再打开即无效)

原来vc6下的代码,可以正常使用,现在移植到2010和2013下,问题出现,具体描述如下: 因为要读取一个设备的数据(该数据由软件操作控制发送数据,可持续不断以一定格式发);vc2010环境,用API函数(createfile)打开串口,期间用afxbeginthread开启了一个线程,运行进程函数,该函数主要为只要联机变量为真(连上了串口),就等待串口的字符串,然后把字符串放到缓存,回调函数完成字符串的处理和显示。 现在,当我第一次打开串口(没有连设备,只是用一根USB-RS232线转了一个串口),正常打开,关闭后(CloseHandle函数)再次打开,createfile返回的句柄即显示无效:错误代码6,句柄为0xfffffff。只能重新运行程序,然后还是第一次正常打开,关闭后即无法打开! ```打开串口,并启动线程 BOOL CComLink::NewConnection(BYTE nRetType, WORD UserID, BYTE nPort, LPVOID pOwner, LPVOID pParam) { if(m_bConnected) return FALSE; m_hCom = OpenConnection(CommProc, nPort); m_UserID = UserID; m_nRetType = nRetType; m_pWnd = (CWnd *)pOwner; m_pMsgFunc = (_CALLBACK_MSG *)pParam; return m_bConnected; } HANDLE CComLink::OpenConnection(AFX_THREADPROC pfnThreadProc, BYTE nPort) { HANDLE h_Com; wchar_t szPort[15]; COMMTIMEOUTS CommTimeOuts; wsprintf(szPort,_T("\\\\.\\COM%d"),nPort); h_Com = CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); if(h_Com == INVALID_HANDLE_VALUE) return NULL; else { SetCommMask(h_Com,EV_RXCHAR); SetupComm(h_Com,4096,4096); PurgeComm(h_Com, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 1000; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 1000; SetCommTimeouts(h_Com, &CommTimeOuts); m_bConnected = true; } if(SetCom(h_Com)) { m_pThread = AfxBeginThread(pfnThreadProc, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL); if(m_pThread == NULL) { CloseCom(); return NULL; } else { m_bConnected = true; } } else { CloseCom(); return NULL; } return h_Com; } ``` ```进程函数 UINT CommProc(LPVOID pParam) { DWORD dwMask = 0; COMSTAT ComStat; DWORD dwErrorFlags; DWORD dwLength; CComLink *pVoid=(CComLink*)pParam; SetCommMask(pVoid->m_hCom,EV_RXCHAR); while(pVoid->m_bConnected) { WaitCommEvent(pVoid->m_hCom, &dwMask, NULL); // 等待串口消息 if((dwMask & EV_RXCHAR)==EV_RXCHAR) // 如果是字符消息 { ClearCommError(pVoid->m_hCom, &dwErrorFlags, &ComStat); if(ComStat.cbInQue) { dwLength=min(sizeof(pVoid->m_DataBuf) - pVoid->m_nDataLen, ComStat.cbInQue); // 取缓冲区数据,确保分配的缓冲区能足够存储 if(!ReadFile(pVoid->m_hCom, &pVoid->m_DataBuf[pVoid->m_nDataLen], dwLength, &dwLength, &pVoid->osRead)) // 读取数据,存储到当前缓冲区位置之后 { if(GetLastError()==ERROR_IO_PENDING) { GetOverlappedResult(pVoid->m_hCom, &pVoid->osRead, &dwLength, true); } } pVoid->m_nDataLen += dwLength; // 数据长度累加 if(pVoid->m_nRetType == DATA_BY_MESSAGE) // 消息模式返回数据 { pVoid->m_pWnd -> SendMessage(WM_COM_RECMSG, pVoid->m_UserID); } else if(pVoid->m_nRetType == DATA_BY_CALLBACK) // 回调函数返回数据 { pVoid->m_pMsgFunc(WM_COM_RECMSG, (long)pVoid->m_pWnd, pVoid->m_UserID); } } }// end if } return 0; } ``` ```关闭串口 BOOL CComLink::CloseCom() { FindClose(m_hCom); CloseHandle(m_hCom); m_bConnected = false; m_hCom =INVALID_HANDLE_VALUE; return TRUE; } ``` ```设置串口 BOOL CComLink::SetCom(HANDLE h_Com) { DCB dcb; GetCommState(h_Com,&dcb); dcb.BaudRate = m_ComSet.BaudRate; dcb.ByteSize = m_ComSet.ByteSize; dcb.Parity = m_ComSet.Parity; dcb.StopBits = m_ComSet.StopBits; dcb.fRtsControl = RTS_CONTROL_ENABLE; return SetCommState(h_Com,&dcb); } ```

OpenCV打开摄像头问题。。。。

OpenCV2.4.13+VS2012+win10程序 void CCountDlg::OnOpencam() { if(pCapture) cvReleaseCapture(&pCapture); pCapture = cvCaptureFromCAM(0); m_num=0; m_in=0; m_out=0; UpdateData(FALSE); // 调用数人数主程序 SetTimer(1,TIMERCNT,NULL); } 用opencam按钮打开可以打开按钮,但是不显示图像,有木有知道为什么的,请指教~

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐