6、删除线程:
rt_thread_delete函数不能在要删除的线程中调用,在其他线程中使用删除此线程。
5、修改串口波特率:
void UART2_change_baud(int baud)
{
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */
/* 修改串口配置参数 */
config.baud_rate = baud; //修改波特率为 9600
//config.data_bits = DATA_BITS_8; //数据位 8
//config.stop_bits = STOP_BITS_1; //停止位 1
//config.bufsz = 128; //修改缓冲区 buff size 为 128
//config.parity = PARITY_NONE; //无奇偶校验位
/* 控制串口设备。通过控制接口传入命令控制字,与控制参数 */
rt_device_control(uart_bluetooth_dev, RT_DEVICE_CTRL_CONFIG, &config);
}
4、线程中有事件处理函数rt_event_recv时,当没有事件触发时线程会挂起来,此时线程其他函数就不执行了。
比如线程中
while(1)
{
BLE_BAUD();
if (rt_event_recv(&event, 1,
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
RT_WAITING_FOREVER, &e) == RT_EOK )
{...}
}
线程先执行BLE_BAUD(),再执行rt_event_recv,此时没有事件触发就会挂起来,因为设的是RT_WAITING_FOREVER,一直等待事件触发,就不再执行BLE_BAUD()了。
1.转自https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=7937&extra=&ordertype=1
要建一个工程模板可以使用rt_thread库里的模板进行修改, 在bsp文件夹中有很多型号的例程,比如rt-thread-v3.1.0\bsp\stm32f107,用env软件cd指令打开,然后menuconfig命令修改配置,save保存,esc退出后,scons命令重新编译,用scons --dist生成新的工程,它就会在stm32f107\dist文件夹中生成新的工程,可以直接拷到别的地方。
2.如何使用rt_thread的串口函数:
要使用串口3作为modbus接口,初始化流程如下:
void thread_entry_SysMonitor(void* parameter)
{
uart_wifi_dev = rt_device_find("uart3");
if(uart_wifi_dev!=RT_NULL)
{
rt_device_open(uart_wifi_dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); //#define RT_DEVICE_FLAG_INT_RX 0x100 /* 设备以中断接收模式打开 */
while(1) //#define RT_DEVICE_OFLAG_RDWR 0x003 /* 以读写方式打开设备 */
{
// rt_device_write(uart_wifi_dev,0,"Hello Wi-Fi!\r\n",14);
MODS_Poll();
rt_thread_delay(5);
}
}
}
一开始使用的是 rt_device_open(uart_wifi_dev, RT_DEVICE_OFLAG_RDWR);
只能发不能收,不会进接收中断,需添加 RT_DEVICE_FLAG_INT_RX
3、转自https://www.cnblogs.com/wan0807/p/10123855.html
还未用到,先记下来
“近日在移植了RTThread nano到程序中后,发现程序运行一会(半小时到一个钟头不等)就会进HardFault,给我的直觉就是线程栈溢出了,但我还是不能确定是这个问题。由于处理器资源有限,所有只移植了RTThread的kernel,像finish什么的都没有移植。如此以来,我就不能通过finish去查看内存使用情况了。
2、解决问题:
方法一: 一筹莫展之时,突然想起一个办法可以试试,在进Hardfault的位置放置断点,当程序运行至此处时,通过watch window查看线程栈数组,(线程栈初始化时全部用“#”0x23进行了填充,栈使用过的部分就会将0x23给覆盖掉),是不是整个栈区都没有连续的0x23了,若是,则证明栈溢出了。
方法二: 同样可以通过查看map文件,找到栈的起始地址,通过memory来查看,栈是否溢出。"