你好,
我想打印1000倍的东西
for (int i = 0;我+ +){< = 1000;
uart_write(“a”,16岁,NULL);}
但它只打印在uart上的一部分,然后它将停止…
我在DSPS设备中附加了这些,如果我从主机收到了一些东西:
Int user_sps_server_data_rx_ind_handler(ke_msg_id_t const msgid,
Struct sps_server_data_rx_ind const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
for (int i = 0;我+ +){< = 1000;
uart_write(“a”,16岁,NULL);}
user_ble_push ((uint8_t *)参数- >数据,参数- >长度);
返回(KE_MSG_CONSUMED);
}
我撞墙了:-)
也许有人能给我指路
设备:
嗨,哥特,
这里没发生什么事。uart_write(x)将在处理程序中阻塞。另外,uart_write()的处理方法应该与此略有不同。uart_write是在ROM中,但是我们可以引用uart2_write的功能。Void uart2_write(uint8_t *bufptr, uint32_t size, Void (*callback) (uint8_t))。这是寻找一个指针和一个大小。有几种不同的方法可以做到这一点。
1)创建一个1000字符的缓冲区,并将指针与size = 1000一起传递。然后你只需要调用它一次,当这个完成时你会得到一个回调。就像这样。
uint8_t缓冲[1000];
//0x61 'a'的Ascii码
memset(缓冲区,0 x61, 1000);
uart_write(缓冲[0],1000年,NULL);
2)你可以使用异步方法和回调。记忆力会更好。uart_write(“a”,1 my_callback)。然后在my_callback中,每次打印一个字符并再次调用uart_write()时只增加一个计数器。
乔恩
谢谢你帮助我理解它!这也是可能的祝福发送?
非常感谢
是的。User_ble_push正在寻找一个指针和一个长度-类似的。这将传递数据到FIFO缓冲区,并通过BLE发送数据。
JK
有长度限制吗??
通过跟踪user_buffer_create()的代码可以看到长度限制。这些在user_scheduler_init()中调用,并由TX_BUFFER_ITEM_COUNT和RX_BUFFER_ITEM_COUNT定义:
如果(! user_buffer_initialized (&periph_to_ble_buffer) & & ! user_buffer_initialized (&ble_to_periph_buffer))
{
/ /初始化缓冲
user_buffer_create(& ble_to_peri_buffer, TX_BUFFER_ITEM_COUNT, TX_BUFFER_LWM, TX_BUFFER_HWM);
user_buffer_create(& peripher_to_ble_buffer, RX_BUFFER_ITEM_COUNT, RX_BUFFER_LWM, RX_BUFFER_HWM);
}
#define TX_BUFFER_ITEM_COUNT (int) 1800
#define RX_BUFFER_ITEM_COUNT (int) 1800
User_ble_push,写入ble_to_peripher_buffer。
Void user_ble_push(uint8_t* wrdata, uint16_t write_amount)
{
Bool send_flow_off = false;
//将数据写入缓冲区;
user_buffer_write_items (&ble_to_periph_buffer wrdata write_amount);
//检查缓冲区是否已满,如果是,则发送XOFF
send_flow_off = user_check_buffer_almost_full (&ble_to_periph_buffer);
//如果必须发送XOFF,请尽快发送
如果(send_flow_off)
{
user_send_ble_flow_ctrl (FLOW_OFF);
}
/ /开始传输
__disable_irq ();
如果(! callbackbusy)
{
callbackbusy = true;
uart_tx_callback (UART_STATUS_INIT);
}
__enable_irq ();
}