⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
6个职位/ 0个新职位
最后发表
gert186
离线
最后看到:1年4个月前
加入:2016-04-21 59
理解问题

你好,

我想打印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);

我撞墙了

也许有人能给我指路:-)

设备:
JK_Dialog
离线
最后看到:两个月四个星期前
工作人员
加入:2016-08-22 23:07
嗨,哥特,

嗨,哥特,

这里没发生什么事。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()。

乔恩

gert186
离线
最后看到:1年4个月前
加入:2016-04-21 59
谢谢你帮助我

谢谢帮助我理解它!这也可以用于祝福发送吗?
非常感谢

JK_Dialog
离线
最后看到:两个月四个星期前
工作人员
加入:2016-08-22 23:07
是的。user_ble_push是

是的。User_ble_push是寻找一个指针和一个长度-类似。这将传递数据到FIFO缓冲区,并通过BLE发送数据。

JK

gert186
离线
最后看到:1年4个月前
加入:2016-04-21 59
有长度限制吗?

有长度限制吗?

JK_Dialog
离线
最后看到:两个月四个星期前
工作人员
加入:2016-08-22 23:07
长度限制可以是

可以通过跟踪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 ();