我收到这个错误......
信号量超时期限已过期.
在这条线上......
ThePorts.ActivePort1.Open();
......但我不时会得到它.当它发生时,它会一次又一次地发生.然后问题消失了几个小时或几天,然后又回来了.
串口是连接蓝牙的USB.
我认为这个人有一个非常相似的问题,但不是在C#
使用usbser.sys冻结SerialPort.Open/DeviceIoControl/GetcommState
我可以估计,我已经阅读了他的整个问题,以及由此产生的评论和答案,但我真的无法弄清楚哪一个解决了他的问题,或者C#是否与他的体验有很大不同.
感谢您对无能为力的任何帮助.这是它发生的实际代码.
public static void Open_ActivePortWeWillUse(String Drone_StringNameFromUser)
{
SerialPort TempSerialPort = new SerialPort(Drone_StringNameFromUser, (int) SerialPortSpeed);
ThePorts.ActivePort1 = TempSerialPort;
ThePorts.ActivePort1.DataBits = 8;
ThePorts.ActivePort1.Parity = Parity.None;
ThePorts.ActivePort1.StopBits = StopBits.One;
ThePorts.ActivePort1.DataReceived += new SerialDataReceivedEventHandler(OurBackGroundSerialPortReceiver);
ThePorts.ActivePort1.Open(); // "Sometimes" Error hits here
}
Run Code Online (Sandbox Code Playgroud) 我们写了一个粗略的数据范围.
(我们发现的免费软件终端程序无法跟上蓝牙速度)
结果还可以,我们将它们写入逗号分隔文件,以便与电子表格一起使用.最好看看HexTerateBox中的十六进制值排列在漂亮的列中,而不是它现在的样子(附加屏幕上限).
这是将数字(例如,来自0to的数字FF)添加到RichTextBox中的文本的例程.
public void Write(byte[] b)
{
if (writting)
{
for (int i = 0; i < b.Length; i++)
{
storage[sPlace++] = b[i];
pass += b[i].ToString("X") + " "; //// <<<--- Here is the problem
if (sPlace % numericUpDown1.Value == 0)
{
pass += "\r\n";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想办法为指导pass += b[i].ToString("X") + " ";,以价值观从产生前导零00h到0Fh
或者一些其他的方式把字节值b分为两个字母字符从00到FF

左边的数字FF 40 0 5,排列整齐,整齐,因为它们是相同的.一旦我们遇到任何数据差异,列就会消失,数据变得非常难以通过人类观察来阅读.
如果我require在 Lua 脚本中包含三个文件,那么这些文件中的任何一个中的任何函数都可以看到(最重要的是,调用)任何其他函数吗?
我遇到了函数调用函数调用其他函数的问题。我尝试将各种功能放在其他文件中,然后include将它们放入主文件中,而不是将它们写入主文件中。
我认为这是有效的,我的测试即使没有定论也是令人信服的。
我的主线代码是这样做的...
require "SOME_REQUIRED_FILE_01"
require "SOME_REQUIRED_FILE_02"
require "SOME_REQUIRED_FILE_03"
XYZ = 0
File_02_Function_A()
Run Code Online (Sandbox Code Playgroud)
可以EVERY在功能上的所有三个 必需的文件看每隔在所有这三个文件的功能?
我向串口发送0xFF
结果我看到 0x3F。
所有其他字节都是正确的。
情况是这样的……
外部盒将这些字节发送到 PC...
0xFF、0x0D、0x00、0x30、0x31、0x53、0x55、0x43、0x43、0x45、0x53、0x53
C# 在缓冲区中生成这个...
0x3F、0x0D、0x00、0x30、0x31、0x53、0x55、0x43、0x43、0x45、0x53、0x53
第一个字节缺少前两位。有没有人见过这个 ?
如果这里有一篇文章解释了发生了什么,更重要的是为什么,甚至最重要的是如何解决它,请指出我。谢谢。
这是代码;我希望我已经了解了 StackOverFlow 系统;我仍然是这个社区的新人,我的 C# 知识大约只有 1 或 2 个月的历史。
public static void OurBackGroundSerialPortReceiver(object sender, SerialDataReceivedEventArgs e )
{
//// Item 1, tell the world, particularly the
//// chief dispatch routin, that we are receiving
aUartSemaphoreThatTells.WhatTheUartBackgroundRxIsDoing = (int)aValueWhichIndicatesThat.theUARTisReceivingData;
SerialPort CurrentPort = (SerialPort)sender; //// Int routine gave is this in the arguments
int LastByteInUartBuffer = CurrentPort.ReadBufferSize;
int TheLastByteTheBoxSent = CurrentPort.BytesToRead;
string inputData = CurrentPort.ReadExisting(); //// This is a …Run Code Online (Sandbox Code Playgroud) 为了尝试对线程进行精心掌握,我尝试了猴子看猴子,并在MSDN上的THIS_PAGE中复制(如读取和输入,而不是剪切和粘贴).
当我这样做时,我得到以下错误
错误2找不到类型或命名空间名称'SetTextCallback'(您是否缺少using指令或程序集引用?)Form1.cs 385 17 ZYX987
错误3找不到类型或命名空间名称'SetTextCallback'(您是否缺少using指令或程序集引用?)Form1.cs 385 41 ZYX987
我在网页上向下滚动,发现很多社区评论表明每个人都有完全相同的问题,因为这个例子具有误导性.即,SetTextCallback永远不会被宣布.
这是我在盯着MSDN页面时输入的模仿版本......
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of
// the calling thread to the thread ID of the
// creating thread. If these threads are different,
// it returns true
if (this.label1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.label1.Text = text;
}
}
Run Code Online (Sandbox Code Playgroud)
请问有人SetTextCallback在我的CopyCatCode中建议我应该放在哪里吗?
第二个问题:声明它的语法是什么样的?
第三个问题:如果 …
如果我可以保证自己整个应用程序中只有一种方法可以写入某个变量,那么我可以允许我的应用程序中的其他方法安全地读取该值吗?
如果是这样,我可以在不锁定变量的情况下逃脱这个特技吗?
在这种情况下,我正在做(或者,尝试做或想要做)是一个线程中的一个方法将值放入变量,然后其他线程中的其他方法将读取该值并做出决策.
一个非常好的选择是锁定写入,同时允许读取.
看了这里锁定的MSDN页面并没有看到这样做的方法.
仍在尝试调试3个不同的线程.
我可以看到线程是合作的; sortta; 有时; 但我真的看不出哪个线程正在做什么.
"控制台"窗口向我显示这样的事情......
The thread '< No Name >' (0x14a4) has exited with code 0 (0x0).
The thread '< No Name >' (0xec8) has exited with code 0 (0x0).
The thread '< No Name> ' (0x15a8) has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)
我认为用这些十六进制值设置名称并不能告诉我任何事情会很棒.
我看着这个MSDN网页和该另一个其中很可能是准确的,但我错过了你在哪里改变部分<No Name>为类似Background Rx或Label1_Text_Change或什么的.
例...
this.demoThread =
new Thread(new ThreadStart(this.Antarctica));
this.demoThread.Start();
Run Code Online (Sandbox Code Playgroud)
我讨厌成为该网站的主要笨蛋,但有人可以请证明,在这三行示例中(实际上它是两行,但无论如何)我如何告诉C#和Visual Studio更改<no name>为Antarctica?我正在谈论在控制台窗口中观看Visual Studio IDE底部的序列.
如果重要,应用程序将显示在一个屏幕上,而Visual Studio IDE则显示在另一个屏幕上.
问题
0x2A, 0x42, 0x78, 0x250x25出现上一次传输的字节[周五晚间调试结果]
我们写了另一个echo例程; 它只是读取它得到的东西并将其写回.
我们在发布模式下构建它(在另一个的建议下)
我写了一个例程,发送了25次相同的号码,看看我得到了什么.
之后,我将值加入并发送25次,然后循环.
结果将附加在此消息的末尾.
我没有得到第一个空字节.基于各种因素,我现在不会担心这一点.
接下来的五轮比赛,我完全恢复了一切
我将尝试包含所有相关的源代码,希望它不是一个文本墙.如果需要更多代码来理解这一点,请询问.
这是有问题的UART的初始化代码.我可以包括
//*****************************************************************//
void initUART1(void) // UART1 for MCU1/2 communication
{
U1MODE=0; //// Mode Register, Manual DS61168D page 180
U1MODEbits.FRZ=0;
U1MODEbits.SIDL=0;
U1MODEbits.IREN=0;
U1MODEbits.RTSMD=0;
U1MODEbits.UEN=0b00; //// Just TX/RX, No CTS/RTS
U1MODEbits.WAKE=1;
U1MODEbits.LPBACK=0;
U1MODEbits.ABAUD=0;
U1MODEbits.RXINV=0;
U1MODEbits.BRGH=1;
U1MODEbits.PDSEL=0b00;
U1MODEbits.STSEL=0;
U1STA=0;
U1STAbits.ADM_EN=0;
U1STAbits.UTXINV=0;
U1STAbits.URXEN=1;
U1STAbits.UTXBRK=0;
U1STAbits.UTXEN=1;
U1STAbits.ADDEN=0;
U1STAbits.OERR=0;
//// Status register, Manual DS61168D page 183
//U1BRG=21; //// …Run Code Online (Sandbox Code Playgroud) 我应该验证我们实现Lua的随机数生成器的能力.
这就是我提出来的......
for i = 1,10000 do -- I hope that's ten thousand
X = math.random(0,9)
if X == 0 then This_Many_0 = This_Many_0 + 1
elseif X == 1 then This_Many_1 = This_Many_1 + 1
elseif X == 2 then This_Many_2 = This_Many_2 + 1
elseif X == 3 then This_Many_3 = This_Many_3 + 1
elseif X == 4 then This_Many_4 = This_Many_4 + 1
elseif X == 5 then This_Many_5 = This_Many_5 + 1
elseif X == 6 …Run Code Online (Sandbox Code Playgroud) 问题:我向UART发送一个值,在另一个UART上出现空值.
- - 细节 - -
这些都是PIC处理器(PIC24和PIC32)
它们都硬接线到印刷电路板上.
它们通过其中的一个UART模块进行通信.
它们(表面上;根据文档)都配置为115200 bps,8-N-1
没有握手,没有启用CTS,没有启用RTS; 我只是把字节放在线上,然后就可以了.
(这些是短小的4字节命令和响应,非常整齐)
PIC32的速率为80 MHz.
PIC24的F [cy] = 14745600
即,它是14.7456 MHz
PIC24发送四个字节(特定的命令序列)
当我在UART的中断服务程序设置一个断点时,PIC32显示空值,然后我看到前四个后(PIC32代码)断点重复点击,我继续看到空值(这是自PIC24以来有意义的)没发送任何东西)
也就是说,当没有理由时,UART似乎重复产生中断
我没有在PIC32端写代码,我每天都在学习它是如何工作的.
然后我让代码运行起来,我不可避免地会说到一条线
52570 1D01_335C 9D01_335C _general_execption_handler sdbbp 0x0
Run Code Online (Sandbox Code Playgroud)
当我到达时,
0080181C9D00F2289F8FFFA0这就像发条一样,所以我怀疑__ISR不会停止.MpLab告诉我这个......
432:
433: //*********************************************************//
434: void __ISR(_UART1_VECTOR, ipl5) IntUart1Handler(void) //MCU communication port
435: {
9D00F204 415DE800 rdpgpr sp,sp
9D00F208 401A7000 mfc0 k0,EPC
9D00F20C 401B6000 mfc0 k1,Status
9D00F210 27BDFF88 addiu sp,sp,-120
9D00F214 AFBA0074 sw k0,116(sp)
9D00F218 AFBB0070 sw k1,112(sp)
9D00F21C 7C1B7844 …Run Code Online (Sandbox Code Playgroud)