This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2650:从 PuTTy 读取 UART

Guru**** 2553360 points
Other Parts Discussed in Thread: CC2650, CC2640, CC1350

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/575419/rtos-cc2650-reading-uart-from-putty

器件型号:CC2650
Thread 中讨论的其他器件: CC2640CC1350SYSBIOS

工具/软件:TI-RTOS

你好

我正在尝试将文本从计算机发送到 CC2650 LaunchPad。

我采用了 ProjectZero (它通过 UART 通道将日志发送到我的计算机中的 PuTTY)、并尝试将"基本接收"的用例放入其中  

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_02_22/exports/tirtos_full_2_14_02_22/docs/doxygen/html/_u_a_r_t_c_c26_x_x_8h.html。

代码如下:

/*********

@文件 main.c

@BLE 堆栈示例应用的简单主条目。

组:WCS、BTS
目标器件:CC2650、CC2640、CC1350

秘书长的报告

版权所有(c) 2013-2016、德州仪器(TI)公司
保留所有权利。

以源代码和二进制形式重新分发和使用、有无
允许进行修改、前提是满足以下条件
符合:

*源代码的重新分发必须保留上述版权
声明、此条件列表和以下免责声明。

*二进制形式的再发行必须复制上述版权
注意、本条件列表和中的以下免责声明
分发时提供的文档和/或其他材料。

*德州仪器公司的名称和名称均不相同
其贡献者可用于认可或推广衍生产品
未经特定的事先书面许可。

本软件由版权所有者和贡献者"按原样"提供
以及任何明示或暗示的保证、包括但不限于
对特定适销性和适用性的隐含保证
不承认目的。 在任何情况下、版权所有者不得或
任何直接、间接、偶然、特殊、
惩罚性或后果性损害(包括但不限于
采购替代货物或服务;丧失使用、数据或利润;
或业务中断)、无论原因是什么以及任何责任理论、
无论是合同、严格责任还是侵权行为(包括疏忽或)
否则)因使用本软件而以任何方式产生、
即使被告知可能会发生此类损坏。

秘书长的报告
版本名称:BLE_SDK_2_02_00_08
推出日期:2016-05-06 22:17:28
(小部分 /

/*********
*包括
*

#include
#include

#include
#include
#include
#include
#include

#include "iCall.h"
#include "hal_dassert.h"
#include "bcomdef.h"
#include "peripheral.h"
#include "project_zero.h"

#include
#include

/*启用指令提取缓存所需的头文件*/
#include
#include

#ifndef USE_DEFAULT_USER_CFG

#include "Ble_user_config.h"

// BLE 用户定义的配置
bleUserCfg_t user0Cfg = BLE_USER_CFG;

#endif // USE_DEFAULT_USER_CFG

#include

/*********
*宏
*

/*********
*常量
*

/*********
* typedef
*

/*********
*局部变量
*

/*********
*全局变量
*

/*********
* extern
*

extern void AssertHandler (uint8 assertCasuse、uint8 assertSubcause);

extern Display_Handle dispHandle;

无效 myTskFunc3 (UArg arg0、UArg arg1)

log_info0 ("请输入内容");
System_printf ("从此处开始");
system_flush();

UART_Handle 句柄;
UART_Params 参数;
uint8_t rxBuf[1];//接收缓冲区
uint32_t timeoutU = 5000;// 5ms 超时、默认超时不是超时(BIOS_wait_forever)
//初始化 UART 并指定非默认参数
UART_PARAMS_INIT (params);
params.baudrate = 115200;
params.writeDataMode = UART_DATA_BINARY;
params.readTimeout = timeoutU/ Clock_tickPeriod;//默认节拍周期为10us
//打开 UART 并执行读取操作
句柄= UART_OPEN (Board_UART、params);
int rxBytes = uart_read (handle、rxBuf、1);//有问题的行


system_printf ("在此处结束");
system_flush();

log_info0 ("在此处结束");


/*********
*@fn Main
*
*@简要应用程序主页
*
*输入参数
*
*@param 无。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
int main()

/*注册应用程序回调到堆栈中发出的 TRAP 断言*/
RegisterAssertCback (AssertHandler);

PIN_init (BoardGpioInitTable);

#ifndef power_saving
/*设置待机、断电和空闲模式的限制*/
power_setConstraint (PowerCC26XX_SB_disallow);
power_setConstraint (PowerCC26XX_IDLE_PD_Disallow);
#endif // power_saving

/*初始化 RTOS 日志格式并在空闲线程中输出到 UART。
*注意:定义 XDC_RAuntime_Log_disable_all 以删除 Log 的所有影响。
*注意:Params 提供115200、8、N、1和阻塞模式时为空*
UART_INIT();
UartLog_init (UART_open (Board_UART、NULL));

/*初始化 iCall 模块*/
iCall_init();

/*启动外部映像的任务-优先级5.
iCall_createRemoteTasks();

/*启动配置文件-优先级3.
GAPRole_createTask();*/

//ProjectZero_createTask();

Task_handle myTsk;
Task_Params taskParams;
ERROR_Block eb2;
ERROR_INIT (&eb2);
//创建优先级为15的1个任务
Task_Params_init (&taskParams);
taskParams.STACKSIZE = 512;
taskParams.priority = 2;
myTsk = Task_create (myTskFunc3、&taskParams、&eb2);
if (myTsk == NULL){
System_abort ("任务创建失败");


/*启用中断并启动 SYS/BIOS */
BIOS_start();

返回0;


/*********
*@fn AssertHandler
*
*@简述这是应用程序用于发出断言的回调处理程序
堆栈中。
*
*输入参数
*
*@param assertCusal -按照 hal_dassert.h 中定义的断言原因
*@param assertSubcause -可选断言子 cause (请参阅 hal_dassert.h)。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
空 AssertHandler (uint8 assertCasuse、uint8 assertSubcause)

//如果应用程序尚未打开,请打开显示屏
如果(!dispHandle)

dispHandle = Display_open (Display_Type_LCD、NULL);

display_print0 (dispHandle、0、0、">>>stack assert);

//检查断言原因
开关(砂锅)

案例 HAL_ASSERT_CAUSE_OUT_ORT_MEMORY:
display_print0 (dispHandle、0、0、"***错误***");
display_print0 (dispHandle、2、0、">>内存不足!");
中断;

案例 HAL_ASSERT_CAUSE_INTERNAL_ERROR:
//检查子原因
if (assertSubcause == HAL_assert_SUBCAUSE_FW_INERnal_error)

display_print0 (dispHandle、0、0、"***错误***");
Display_print0 (dispHandle、2、0、">>内部固件错误!");

其他

display_print0 (dispHandle、0、0、"***错误***");
display_print0 (dispHandle、2、0、">>内部错误!");

中断;

案例 HAL_ASSERT_CAUSE_ICALL_ABORT:
display_print0 (dispHandle、0、0、"***错误***");
display_print0 (dispHandle、2、0、">ICALL abort!");
HAL_ASSERT_SPINLOCK;
中断;

默认值:
display_print0 (dispHandle、0、0、"***错误***");
display_print0 (dispHandle、2、0、">>默认 SPINLOCK!");
HAL_ASSERT_SPINLOCK;

返回;


/*********
*@fn smallErrorHook
*
*@要连接到 TI-RTOS 的简短错误处理程序。
*
*输入参数
*
*@param EB -指向错误块的指针。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
空 smallErrorHook (Error_Block *EB)

适用于(;);


/*********
*

我正在尝试从 PuTTY 发送一个字符、但没有发生任何情况-包括未写入 PuTTY 的日志。

"从这里开始"是唯一发生的事情-因此我猜它卡在阅读中是因为

它没有第二张"在这里结束"的照片-也许是因为腻子的问题.. 但我真的不能说,因为有超时,不应该被卡住。

如果我要删除有问题的行-"int rxBytes = UART_Read (handle、rxBuf、1);"

然后、日志将写入 Putty (我真的很奇怪。 我无法解释为什么删除读数行会使日志正常工作)。

我只需要将文本从我的计算机发送到 LaunchPad。  

所以我想知道是否有人知道为什么事情是按照他们的方式发生的。

或者可能还有另一种向 Launchpad 发送文本的方法。

谢谢你  

体层器。