你好,
我想打印出1000次的东西
for(int i = 0; i <= 1000; i ++){
UART_WRITE(“A”,16,NULL);}
但它只在UART中打印它的一部分,然后它将停止......
如果我从主机收到某些东西,我将附在DSP设备中的附件:
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; i <= 1000; i ++){
UART_WRITE(“A”,16,NULL);}
user_ble_push((uint8_t *)param->数据,param->长度);
return(ke_msg_consumed);
}
我碰到了一堵墙:-)
也许有人可以告诉我的方式:-)
设备:
嗨盖特,
这里有很少的事情。UART_WRITE(x)将在您的处理程序中阻止。此外,UART_WRITE()shoudl会与此不同。UART_WRITE在ROM中,但我们可以参考UART2_WRITE for功能。void UART2_WRITE(UINT8_T * BUFPTR,UINT32_T大小,void(* Callback)(UINT8_T))。这正在寻找一个指针和尺寸。所以有几个不同的方式可以做到这一点。
1)创建1000个字符缓冲区,并将指针与size = 1000传递。然后,您只需调用一次,并且在完成时将获得回调。所以这样的事情。
uint8_t buffer [1000];
// 0x61'a'的ASCII代码
Memset(缓冲区,0x61,1000);
UART_WRITE(&BUFFER [0],1000,NULL);
2)您可以使用异步方法并使用回调。记忆会更好。UART_WRITE(“a”,1,my_callback)。然后在my_callback中,每次打印一个字符并再次调用UART_WRITE()时,递增一个计数器。
Jon.
谢谢,有助于我了解它!这也可以发送吗?
非常感谢
是的。user_ble_push正在寻找一个指针和长度 - 类似。这将通过数据传递给FIFO缓冲区并通过BLE发送数据。
jk.
任何长度限制??
通过追踪user_buffer_create()的代码,可以看到长度限制。这些在user_scheduler_init()中调用,由tx_buffer_item_count定义,rx_buffer_item_count:
if(!user_buffer_initialized(&periph_to_ble_buffer)&&!user_buffer_initialized(&ble_to_periph_buffer))
{
//初始化缓冲区
user_buffer_create(&ble_to_periph_buffer,tx_buffer_item_count,tx_buffer_lwm,tx_buffer_hwm);
user_buffer_create(&periph_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_periph_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,请尽快发送
if(send_flow_off)
{
user_send_ble_flow_ctrl(flow_off);
}
//开始传输
__disable_irq();
如果(!CallbackBusy)
{
callbackbusy = true;
UART_TX_CALLBALL(UART_STATUS_INIT);
}
__enable_irq();
}