参照的例程是这个:中科蓝讯AB32VG1上的UART实践(地址:https://docs.qq.com/doc/DTVVWWXpLRVl6cER2?_t=1626260921919)
首先要说的是这个“”RT-Thread Settings,在“Debug”视口内才会有。而且,如果IDE内出现了这样的警告提示:“Invalid project path: Duplicate path entries found (/test_UART_Bluetrum [Include path] base-path:test_UART_Bluetrum-1 isSystemInclude:true includePath:rt-thread/include/libc), path: [/test_UART_Bluetrum].”就会打不开。
本帖最后由 MianQi 于 2021-9-14 21:45 编辑需要将默认的“drv_usart.c”中这段代码:
for (int i = 0; i < obj_num; i++)
{
/* init UART object */
uart_obj.config = &uart_config;
uart_obj.serial.ops = &ab32_uart_ops;
uart_obj.serial.config = config;
uart_obj.serial.config.baud_rate = 1500000;
/* register UART device */
result = rt_hw_serial_register(&uart_obj.serial, uart_obj.config->name,
RT_DEVICE_FLAG_RDWR
| RT_DEVICE_FLAG_INT_RX
| RT_DEVICE_FLAG_INT_TX
| uart_obj.uart_dma_flag
, NULL);
RT_ASSERT(result == RT_EOK);
}
替换为:
for (int i = 0; i < obj_num; i++)
{
/* init UART object */
uart_obj.config = &uart_config;
uart_obj.rx_idx = 0;
uart_obj.rx_idx_prev = 0;
uart_obj.serial.ops = &ab32_uart_ops;
uart_obj.serial.config = config;
uart_obj.serial.config.baud_rate = 1500000;
uart_obj.rx_buf = rt_malloc(uart_config.fifo_size);
if (uart_obj.rx_buf == RT_NULL) {
LOG_E("uart%d malloc failed!", i);
continue;
}
//如果是串口1,修改波特率为:115200
if (i == 1)
{
uart_obj.serial.config.baud_rate = 115200;
}
//------------------
/* register UART device */
result = rt_hw_serial_register(&uart_obj.serial, uart_obj.config->name,
RT_DEVICE_FLAG_RDWR
| RT_DEVICE_FLAG_INT_RX
| RT_DEVICE_FLAG_INT_TX
| uart_obj.uart_dma_flag
, NULL);
RT_ASSERT(result == RT_EOK);
}
在“Downloader v1.9.7”提供的“Develop”界面中能看到“Hello, world”,但是,输一次“uart_sample”没有反应,再输一次,报错:
搜索这个“Function”:
在这里找到了函数原型:
在这里找到了报错的提示:
本帖最后由 MianQi 于 2021-9-15 11:23 编辑
/* get object information */
information = rt_object_get_information(type);
RT_ASSERT(information != RT_NULL);
/* check object type to avoid re-initialization */
/* enter critical */
rt_enter_critical();
/* try to find object */
for (node = information->object_list.next;
node != &(information->object_list);
node = node->next)
{
struct rt_object *obj;
obj = rt_list_entry(node, struct rt_object, list);
if (obj) /* skip warning when disable debug */
{
RT_ASSERT(obj != object);
}
}
这段代码的确切含义,待解!
在VS Code中导入,这部分参考了这个教程 - https://club.rt-thread.org/ask/article/2864.html(Vscode中使用RT_Thread Studio插件初体验)
首先,点击“RT-Thread”插件图标:
选择“添加项目到当前工作空间”:
将已经解压的文件夹添加进来:
添加进来了:
根据提示安装一个软件工具:
“Build”没有报错。插上板子,打开串口:
但是没有串口通信:
看来RT-Thread对Linux的支持目前尚不具备。
本帖最后由 MianQi 于 2021-9-15 12:15 编辑在Linux下使用RTThread确实有问题,我之前弄了,有些代码就会出问题。
引用: freebsder 发表于 2021-9-17 18:06 为啥要在Linux下面折腾VSCode? 你会发现弄了半天,最后还是会用最简单的工具,哈哈。
这样就能用全正版了,心里会轻松一些。
引用: MianQi 发表于 2021-9-17 18:13 这样就能用全正版了,心里会轻松一些。
我看你前面楼里面的IDE是eclipse改的呀,这个不可能收费吧。
工具啥的少折腾,没啥意思,用方便的,顺手的就好了。我曾经花了好几年时间配置各种linux桌面,服务,学vim,结果到现在Linux能跑就行,要搞代码用VS远程过去,vim只记得最基本最简单的操作。
问题是,忘了所有这些东西,不但不影响我搞事情,反而有趁手工具可以节省精力和时间。