你好,
我想打印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来实现这个功能。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(&外围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_peri_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 ();
}