这段时间稍微折腾了一下stm32,稍微知道了一点stm32程序的编写方法,所以再次拿起了rtt,因为这个东西确实很强大。
随手记录一下rtt的一些知识:
1、关于finsh
这是一个命令行系统,很好玩,开始不知道怎么用的,输入help之类的毫无用处,后来发现按tab键就能出现帮助。命令格式不是一般想象中那样,而是类似于C语言函数,比如:显示进程,得这样写list_thread(),再比如控制LED亮灭,得这样写led(1,0),这样第2个led就灭了。当时确实折腾了我好一整子。另外,还可以将自己写的函数可以在finsh中调用,参考led.c的最后部分,用FINSH_FUNCTION_EXPORT宏,第一个参数是函数名,第二个参数是描述文字,不用双引号。
2、关于用Eclipse开发
官方wiki有篇用Eclipse开发的教程,说得很详细了。不过我试验了一下,最先的感觉是直接新成工程后会有一大堆的动态错误检测,编译却能通过,确实得关掉。另外,用jlink debug不是很方便,不过没关系,基本上用j-flash arm下载就行了。
3、关于线程的堆栈空间
为了多线程能够顺利执行,必须得为每个线程分配一定的堆栈空间,用于储存进程切换时的操作数据。至于空间得分配多少,据一篇文章介绍说,可以先分配高一点,然后用finsh再list_thread,即可看到"max used“使用了多少堆栈。当然,如果ram充足,多分配点也无妨。
4、RTT最简单应用
最简单应用莫过于创建一个新的线程了。参照led线程创建一个新的进程。
1、定义线程堆栈、结构体、入口函数
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t led_stack[ 512 ];
static struct rt_thread led_thread;
static void led_thread_entry(void* parameter){
/*TODO:*/
}
2、在rt_application_init函数中初始化
按照led线程的写法是在rt_init_thread_entry进程前面,应该也可以写在后面,毕竟两者初始化后多直接启动了,时间上应该差别不大。
led的线程初始化函数是:
rt_err_t result;
result = rt_thread_init(&led_thread,
"led",
led_thread_entry, RT_NULL,
(rt_uint8_t*)&led_stack[0], sizeof(led_stack), 20, 5);第1个参数:线程结构体
第2个参数: 线程名称(?能用中文否?)
第3个参数:线程入口函数
第4个参数:线程入口函数的参数
第5个参数:堆栈空间起始地址
第6个参数:堆栈空间大小
第7个参数:线程优先级(0最高?)
第8个参数:如果有相同的优先级,进程静默时间
3、启动进程
rt_thread_startup(init_thread);
RT-Thread学习笔记(2)的更多相关文章
-
thread学习笔记--BackgroundWorker 类
背景: 在 WinForms 中,有时要执行耗时的操作,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,或者在该 ...
-
Boost Thread学习笔记五
多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thr ...
-
Boost Thread学习笔记四
barrierbarrier类的接口定义如下: 1 class barrier : private boost::noncopyable // Exposition only 2 { 3 pub ...
-
Boost Thread学习笔记三
下面先对condition_impl进行简要分析.condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate.m_queue,及一个Mutex(互斥体,跟boost ...
-
Boost Thread学习笔记二
除了thread,boost种:boost::mutexboost::try_mutexboost::timed_mutexboost::recursive_mutexboost::recursive ...
-
Boost Thread学习笔记
thread自然是boost::thread库的主 角,但thread类的实现总体上是比较简单的,前面已经说过,thread只是一个跨平台的线程封装库,其中按照所使用的编译选项的不同,分别决定使用 W ...
-
MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt
0 前言 2014年8月yeelink推出基于MQTT协议的开关类型设备控制API.相比于基于HTTP RESTful的轮训方式,通过订阅相关主题消息,能够远程控制类应用实时性更好. 本文使用 ...
-
LwIP学习笔记——STM32 ENC28J60移植与入门
0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...
-
《Linux内核分析》第六周学习笔记
<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
-
C#/.NET转Java学习笔记
大学研究了三年的.Net,由于偶然的机会,拿到IBM的Java web实习offer,所以决定转行搞Java(综合了校招情况.发展前景和其他各种因素). 下面是我在学习Java web的一些学习笔记( ...
随机推荐
-
解决Android Studio 无法显示Layout视图问题
在Android Studio 当中,如果你选择的SDK的版本 与你所显示的视图版本不一致时,会出现这个错误 Exception raised during rendering:com/android ...
-
markdown测试
测试 1.第一点 这一点 代码块 @requires_authorization def somefunc(param1='', param2=0): '''A docstring''' if par ...
-
.net平台下C#socket通信(上)
在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳过去了.都是废话,进入正题. TCP/IP:Transmission Control Protocol ...
-
UITableView的性能优化10个小技巧
通常你会发现一个图片类的app会在一个imageView上做下面这些事情: 1 下载图片(主要的内容图片+用户头像图片)2 更新时间戳3 展示评论4 计算动态的cell的高度 Tip#1 学习 ...
-
Centos6.4 mysql安装与配置
安装命令: yum install mysql #安装客户端 yum install mysql-server #安装服务器 yum install mysql-devel #安装开发库 安装完成后, ...
-
C#随机生成连续多少个十六进制数字
1.调用系统函数生成全球唯一标识 Guid.NewGuid().ToString(); 2.生成16组十六进制数 ,)+Guid.NewGuid().ToString().Substring(,)+G ...
-
JavaScript(三)---- 控制流程语句
常用的控制流程语句有判断语句.分支语句.循环语句.基本用法都和java中的一致,switch有几点特殊. 1.判断语句 格式: if(判断条件){ 符合条件执行的代 ...
-
移动端登录页面input获取焦点后页面布局及输入框上移的问题
最近切微信页面的时候,发现移动端的登录页面,带输入框的那种,如图: 从页面本身来看没有什么问题,上传至测试服务器,用iphone访问也没有什么问题,但是当同事用Android手机获取焦点后,问题来了, ...
-
java中文拼音字母排序
package com.yputil.util; import java.text.CollationKey;import java.text.Collator;import java.util.Ar ...
-
启动nginx报错问题
为了解决生产环境的bug,模拟生产环境,我使用了nginx,在安装启动的过程中,出现了很多问题. 1.nginx下载地址 http://nginx.org/en/download.html 这是ngi ...