关键词:
0. Fork例程到自己的GitHub账号:
开发环境搭建
1. QEMU安装
建议使用qemu-system-gnuarmeclipse,该qemu分支对stm32f4有更好的支持,主要面向Eclipse开发环境。
-
到网页 https://github.com/gnu-mcu-eclipse/qemu/releases/tag/gae-2.8.0-20161227 下载二进制文件 gnuarmeclipse-qemu-debian64-2.8.0-201612271623-dev.tgz到~/work目录
-
在工作目录解压缩文件,并把路径添加到$PATH变量中
#cd ~/work
#tar xvf gnuarmeclipse-qemu-debian64-2.8.0-201612271623-dev.tgz
#chmod -R -w ./qemu
export PATH=~/work/qemu/2.8.0-201612271623-dev/bin/:$PATH
- 测试qemu能否正常运行
#qemu-system-gnuarmeclipse --version
显示版本信息为2.8.0,正常。
2. 编译例程
- 在/Projects/Demo1目录下运行make,生成hello_rtos.elf文件
说明:qemu-system-gnuarmeclipse当前版本不支持STM32F4的浮点,相应的,FreeRTOS使用的portable目录没有使用ARM_CM4F而是使用ARM_CM3。
3. QEMU仿真
在Demo1目录下运行脚本文件:
#./qemu.sh
4. GDB调试
在/Projects/Demo1目录下运行qemu_gdb脚本文件,该文件中添加了--gdb tcp::1234 -S
qemu启动后等待来自gdb的调试指令,打开另外一个终端窗口,运行
#arm-none-eabi-gdb
在gdb界面内运行:
(gdb)target remote localhost:1234
(gdb)continue
5. 编程作业具体要求:
- 创建三个任务:Sender_Task,Receiver_Task, Monitor_Task
- Sender_Task的任务执行周期为2ms,Receiver_Task的任务执行周期为1000ms, Monitor_Task的任务执行周期为10000ms。
- Sender_Task在每个执行周期向Receiver_Task发送一个32位无符号整数,第一次发送1,然后依次发送2,3,4......,发送完10000后再从1开始发送。同时对发送的数据进行计算累加计算并保存当前累加结果。
- Receiver_Task对接收到的数据进行和Sender_Task同样的累加计算并保存当前累加结果。
- Monitor_Task在每个执行周期检查Sender_Task发送的每个数据是否都被Receiver_Task正确的接收和处理,请自行设计一种检查机制并实现。
- 可利用STM32F429I Discovery开发板的相关硬件(LED/LCD/串口)来输出相关状态信息。
- 使用FreeRTOS的任务间通信和同步API完成上述功能。
1.main函数
int main(void)
{
MsgQueue=xQueueCreate(30000,sizeof(uint32_t));
xTaskCreate(
Sender_Task,
"Sender_Task",
configMINIMAL_STACK_SIZE,
(void*) NULL,
tskIDLE_PRIORITY+4UL,
NULL
);
xTaskCreate(
Receiver_Task,
"Receiver_Task",
configMINIMAL_STACK_SIZE,
(void*) NULL,
tskIDLE_PRIORITY+3UL,
NULL
);
xTaskCreate(
Monitor_Task,
"Monitor_Task",
configMINIMAL_STACK_SIZE,
(void*) NULL,
tskIDLE_PRIORITY+2UL,
NULL
);
vTaskStartScheduler();
for( ;; );
2.Sender_Task
void Sender_Task(void *pvParameters)
{
uint32_t Sendnum=1;
while(1)
{
xQueueSend(MsgQueue,(void* )&Sendnum,0);
Sendsum=Sendsum+Sendnum;
Sendnum++;
if(Sendnum==10000)
{
uint32_t Sendnum=1;
}
vTaskDelay(2);
}
}
3.Receiver_Task
void Receiver_Task(void *pvParameters)
{
uint32_t Receivernum=0;
while(1)
{
while(xQueueReceive(MsgQueue,&Receivernum,
0/portTICK_RATE_MS) == pdTRUE)
{
Receiversum=Receiversum+Receivernum;
}
vTaskDelay(1000);
}
}
4.Monitor_Task
void Monitor_Task(void)
{
while(1)
{
if(Receiversum == Sendsum)
{
Green_LED_On();
vTaskDelay(1000/ portTICK_RATE_MS);
Green_LED_Off();
}
else
{
Red_LED_On();
vTaskDelay(1000/ portTICK_RATE_MS);
Red_LED_Off();
}
vTaskDelay(10000);
}
}
第二次作业
...天工具,它已经深深地嵌入我们生活每一个方面。优点:实时性(可以和天南海北的人实时进行信息交流)、多面性(和多方面的业务公司有合作,一个QQ号既可以玩游戏又可以进行支付 查看详情
第二次作业
...天工具,它已经深深地嵌入我们生活每一个方面。优点:实时性(可以和天南海北的人实时进行信息交流)、多面性(和多方面的业务公司有合作,一个QQ号既可以玩游戏又可以进行支付 查看详情
《实时控制软件设计》第二周作业
状态分析由题目描述,只有两种不同事件,一个是车辆进入,一个是车辆离开,与之对应的传感器信号,起落杆信号,通行灯信号都是一同变化,因此可以简化成两种复合状态。 代码实现 传感器头文件////Createdbyzhuha... 查看详情
实时软件控制第二周作业
停车场门禁控制系统的状态机设计门禁控制系统的输入信号包括:起落杆位置传感器:有两个位置值信号(升起/落下)汽车入闸传感器:有两个值(True/False)汽车出闸传感器:有两个值(True/False)门禁控制系统的输出信号包括... 查看详情
第二次作业
...并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。坚持进行阶段评审统计结果显示:大部分错误是在编码之前造成的,大约占63%错误发现的越晚,改正它要 查看详情
《实时控制软件》第二周作业
首先制定各个变量名称入闸传感器:sensor_in;出闸传感器:sensor_out;起落杆上升:gan.raise();起落杆下降:gan.down();信号灯:light(1为绿,0为红);通行状态:A0为禁止通行,A1为允许通行;竖着写(在状态中判断事件)C代码片段cur_st... 查看详情
软件工程第二次作业
... 1.编写一个程序实现一个文件中单词统计。 2.从控制台输入文件的名字,然后统计单词的数目。 3.指定文件目录进行遍历,分别对每一个文件中的单词进行统计,输入前十个出现频次最高的单词及相应的次数。 4.... 查看详情
实时控制软件设计第二周作业
一.汽车出入门禁系统状态机设计状态机所有状态:入闸传感器(两种状态):Ture False (分别用ET和EF表示)出闸传感器(两种状态):Ture False (分别用OT和OF表示)起落杆(两种状态): UPDOWN  ... 查看详情
第二次作业
...版本库格式进行托管,故名gitHub。2.git有什么用git是版本控制软件,目前最先进最流行的github是一个网站,用于广大开发者开源自己的代码,也提供私有仓库的付费功能,而它采用的版本控制软件就是gitGitHub是基于git的代码库托... 查看详情
软件工程第二次作业
...二、分析三个软件1.QQ(1)优点:可以和你想要交流的人实时在线交流,可以进行面对面视频,在线的用户多,客户端界面简洁,漂亮。缺点:群组内的垃圾信息多,不 查看详情
第二次作业
...准化的作用是什么。软件1,物联智能家居APP,特点远程控制智能家居,例如可在公司控制家中窗帘开关。优点简洁方便,可创造联动的实现自动感应,缺点对网速要去大花费流量多。他并不以盈利为目的,不以此直接赚钱,而... 查看详情
软件工程——第二次作业
...词频统计功能一:创建一个txt文件,并输入相应内容。在控制台输入命令。读取文件,判断txt文件有多少单词,将单词和相应的出现次数显示出来。最后,输出结果。代码如下:1intmain(intargc,char*argv[])2{3system("cmd/cdirE:\folder\*.txt/a-... 查看详情
实时控制软件设计第二周作业-停车场门禁控制系统状态机
画出动作转换图为: 使用模块化设计,将起落杆、出入传感器和通行灯设计成四个模块,分别继承设计好的系统模块接口:1//FSM_Interface.h2#pragmaonce34namespaceFSM5{67classISystemUnit//系统单元接口8{9public:1011virtualvoidInitialize()=0;//初始... 查看详情
实时控制软件设计第二周作业-停车场门禁控制系统状态机设计
门禁控制系统的输入信号包括:起落杆位置传感器:有两个位置值信号(升起/落下)汽车入闸传感器:有两个值(True/False)汽车出闸传感器:有两个值(True/False)门禁控制系统的输出信号包括:起落杆电机控制信号:(上升/... 查看详情
软件工程(2018)第二次个人作业
19组第二次作业之需求文档
...理项目需求,以便于用户对本项目的理解和认识。1.2背景控制器局域网(CAN)是一种最初为汽车工业设计的串行网络,在工业自动化以及其他应用中也成为一种流行的总线。在现代汽车控制技术中,汽车中会使用多个电子控制装... 查看详情
软件工程第二次作业(王伟东)
...到垂青和奖赏。 ㈠词频统计的四个功能 ①首先控制台输入内容到文件中,再对文件进行词频统计; ②命令行输入英文作品名,然后统计作品 查看详情
软件工程-第二次作业-例行报告
本周PSP 本周进度条 累计进度图 PSP饼状图 查看详情