我在通过USART接收数据时遇到了一些麻烦。我实际上想要实现的目标是,我可以通过USART接收一个没有特定长度(只有最大可能长度)的命令。因此,我使用中断例程来检查收到的每个字符,但是我仍然无法实现我想要的功能。每当我收到一个新字符时,都会调用该例程,但是由于某种原因HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx)不能实时升级,因此当我检查rx_data [pointer]时看不到接收到的字符,但是稍后它在rx_data缓冲区中。
到目前为止,我有:
int pointer =0;
...
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if ( USART1->ISR & UART_IT_TXE) {
}
if ( USART1->ISR & UART_IT_RXNE) {
HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx);
if(rx_data[pointer]=='\0') {
pointer=0;
readCommand(rx_data);
clearBuffer(rx_data,buff_size_rx);
} else {
pointer++;
if(pointer>=buff_size_rx) {
pointer=0;
}
}
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
Run Code Online (Sandbox Code Playgroud) 当我在 remix.ethereum.org 下单击创建时,我不明白智能合约实际上去了哪里。例如,如果我选择 Injected Web3,这应该将合约发布到 ropsten 测试网,对吗?但是我怎样才能访问合同呢?当我使用 metamask 时,它会在我使用 web3.js 时为我注入正确的提供程序,但是如果我不想使用注入的 web3,而是在 web3.js 中手动选择提供程序地址,我现在如何找到此合同?我可以通过这种方式访问智能合约吗?
编辑:我不知道我的问题应该有什么问题。我真的没有发现如何在没有注入 web3 的情况下在 ropsten 测试网络中连接到智能合约。通常你在 web3.js 中这样做:
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您没有注入的 web3,那么您可以使用 localhost。但是我无法连接到智能合约,因为它不知道我实际上在哪个网络中发布了智能合约,对吗?