你好,
我想打印1000次
对于(int i=0;i<=1000;i++){
uart_write(“a”,16,NULL);}
但它只在uart上打印一部分,然后它就会被停止。。。
如果我从主机接收到一些东西,我会在DSPS设备中连接这些东西:
int user\u sps\u server\u data\u rx\u ind\u handler(ke\u msg\u id\u t const msgid,
结构sps\u服务器\u数据\u接收\u索引常量*参数,
任务id常量目标id,
Keu任务\u id \u t const src \u id)
{
对于(int i=0;i<=1000;i++){
uart_write(“a”,16,NULL);}
用户\u ble \u push((uint8 \u t*)参数->数据,参数->长度);
返回(已消耗的消息);
}
我撞墙了:-)
也许有人能给我指路:-)
设备:
嗨,格特,
这里发生的事情很少。uart\u write(x)将阻塞处理程序。另外,uartèu write()的处理方式应该与此稍有不同。uart\u write在ROM中,但是我们可以参考uart2\u write来了解其功能。void uart2\u write(uint8\u t*bufptr,uint32\u t size,void(*回调)(uint8\u t))。这是在寻找指针和大小。所以你可以用几种不同的方法来做。
1) 创建一个1000个字符的缓冲区,将指针与size=1000一起传递,然后只需调用一次,完成后就会得到一个回调。就像这样。
uint8_t缓冲器[1000];
//0x61“a”的Ascii码
memset(缓冲区,0x611000);
uart\u write(&buffer[0],1000,NULL);
2) 您可以使用异步方法和回调。记忆力会更好。uart\u write(“a”,1,我的\u回调)。然后在我的\回调中,只要在每次打印字符时增加一个计数器,然后再次调用uart \ u write()。
乔恩
谢谢,这有助于我理解它!这也可以发送吗?
谢谢
对。用户\u ble \u push正在查找指针和长度-类似地。这会将数据传递到FIFO缓冲区,并通过BLE发送数据。
JK公司
任何长度限制??
可以通过跟踪user\u buffer\u create()的代码来查看长度限制。它们在user\u scheduler\u init()中调用,由TX\u BUFFER\u ITEM\u COUNT和RX\u BUFFER\u ITEM\u COUNT定义:
如果(!用户缓冲区\u已初始化(&periph\u to \u ble\u buffer)&&!用户\u缓冲区\u已初始化(&ble\u to \u periph\u缓冲区))
{
//初始化缓冲区
用户缓冲区\u create(&ble\u to\u periph\u buffer,TX\u buffer\u ITEM\u COUNT,TX\u buffer\u LWM,TX\u buffer\u HWM);
用户缓冲区\u创建(&periph\u to \u ble\u buffer,RX\u buffer\u ITEM\u COUNT,RX\u buffer\u LWM,RX\u buffer\u HWM);
}
#定义发送缓冲区项目计数(int)1800
#定义接收缓冲区项目计数(int)1800
用户\u ble \u push,写入ble \u to \u periph \u缓冲区。
void user\u ble\u push(uint8\u t*wrdata,uint16\u t write\u amount)
{
bool send\u flow\u off=假;
//将项目写入缓冲区;
用户缓冲区写入项(&B)到缓冲区,wrdata,写入量;
//检查缓冲区是否已满,如果已满,则发送XOFF
send\u flow\u off=user\u check\u buffer\u most\u full(&ble\u to\u periph\u buffer);
//如果必须发送XOFF,请尽快发送
if(发送流)
{
用户发送流控制(流关闭);
}
//开始传输
__禁用irq();
如果(!胼胝体)
{
callbackbusy=真;
uart\u tx\u回调(uart\u STATUS\u INIT);
}
__启用\u irq();
}