一.实验说明: 信号量是操作系统中的一类事件,是实现任务间通信的一个中间环节.当系统中的多个任务 在运行时,经常需要互相无冲突地访问同一个资源,或者需要互相支持的依赖,甚至有时还要互 相加以必要的限制的制约才保证任务的顺利进行.信号量就像是一种上锁机制,一旦执行至上锁 代码段则一直等待,直到获得相应的钥匙才能进入被锁部分的代码.使用信号量的最初目的是为了 给共享资源设立一个标志,该标志表示共享资源的占用情况.当一个任务在访问共享资源之前,就 可以先对这个标志进行查询,从而在了解资源被占用的情况之…
一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M处于挂起状态,等待某一事件发生,任务L正在运行.此时,任务L要使用共享资源.使用共享资源之前,首先必须得到该资源的信号量.任务L得到了该信号量,并开始使用该共享资源.由于任务H的优先级高,它等待的事件到来之后剥夺了任务L的CPU使用权,任务L被挂起,任务H开始运行.运行过程中任务H也要使用那个任务L…
一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同步一个任务和另一个任务. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/1bpUaFmB 密码:dwre 四.核心代码: /* * Name : main * Description : --- * Author : liu. * * History *…
一.实验说明: 一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的 延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/1kWFhoXp 密码:xuc7 四.核心代码: /* * Name : main * Description : --- * Author : zh. * * History * ------------…
一.实验说明: 本例程建立三个任务,通过任务寄存器来实现任务的建立与删除功能.红灯和绿灯同时以固定 频率闪烁,当任务寄存器为5时,删除绿灯闪烁的任务LED1,此时只有红灯闪烁,当任务寄存器的 值为10时,创建绿灯闪烁任务,红绿灯又开始同时闪烁,如此循环往复执行. 二.源代码下载链接: 链接:https://pan.baidu.com/s/1c39VF4c 密码:zhkb 三.核心代码: /* * Name : main * Description : --- * Author : zh. * *…
一.实验说明: 应用程序在运行中为了某种特殊需要,经常需要临时获得一些内存空间.而作为比较完善的操作系统uC/OS-II,也具有动态分配内存的能力. uC/OS-II对内存进行两级管理:把连续内存分成若 干个分区,每个分区又分成若干个大小相等的内存块 来进行管理.操作系统以分区为单位来管理动态内存,而任务以内存块为单位来获得和释放动态内存.内存分区及内存块的使用情况由内存控制块来记录. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/1DFRuRsmE…
一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/13USFy25QX-e3WjFGmGClfA 密码:jgmj 四.核心代码: /* * Name : main * Description : --- * Author : liu. * * History * -…
一.实验说明: 前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在uC/OS-II中每一个任务在它们内部都有一个消息队列,也即任务消息队列,用户可以直接给一个任务发送消息,不需要额外的消息队列,这样不公优化了代码,而且比用一个单独的外部消息队列更有效率.任务消息队列建立在每一个任务的内部,如下图. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/1ggDoXYr 密码:lm3y 四.核心代码: /* * Name : main…
一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构.   二.实验截图:   三.源代码下载链接: 链接:https://pan.baidu.com/s/1o9JMmxG 密码:psk3   四.核心代码: /* * Name : main * Description : --- * Author : liu. * * History * -----------------…
一.实验说明: 当一个任务正在运行的时候,由于某种情况可能需要终止运行一段时间,终止的这段时间就是 所谓的任务的挂起,可以由该任务自身或者其他任务来挂起一个任务.当被挂起的任务需要再次运 行的时候,可以恢复被挂起的任务.本实验中红灯和绿灯以固定频率闪烁,当任务寄存器的值达到5 的时候,挂起绿灯闪烁任务,只剩下红灯闪烁,当任务寄存器的值达到10的时候,被挂起的绿灯闪 烁任务恢复,红灯和绿灯又同时闪烁,如此循环往复. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.c…
一.实验说明: 本例程移值入uC/OS-II,建立三个任务,红色和绿色LED分别以固定频率闪烁,并且打开串口工具, 输出浮点数据. 二.源代码下载链接: 链接:https://pan.baidu.com/s/1o9pY0uI 密码:5roo 三.核心代码: /* * Name : main * Description : --- * Author : zh. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 *…
iCore4 Demo V1.0程序说明 一.概要 本资料包含5个文件夹: 1.“arm”里是iCore4上arm的程序包,开发环境为KEIL5.17: 2.“fpga”里是iCore4上FPGA的程序包,开发环境为QuartusII13.1: 3.“相关软件”里包含putty终端软件和UDP调试软件: 4.“屏幕截图”为工作时的截图: 5.“驱动”为板载usb转uart的驱动程序,本实验之前需要安装到计算机. 二.测试准备工作 为了运行测试程序,需要做一些准备工作. 1.  通过网线把iCor…
实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. 3.按下按键上电或写程序将进行升级,升级文件.bin文件存入在U盘中 BIN升级文件产生方法: 1.编译APP工程,产生.hex文件. 2.将.hex文件拖至HEX2BIN.EXE即可产生.bin文件. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END…
实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. 3.按下按键上电或写程序将进行升级,升级文件.bin文件存入在SD卡中 BIN升级文件产生方法: 1.编译APP工程,产生.hex文件. 2.将.hex文件拖至HEX2BIN.EXE即可产生.bin文件. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int k; int cnt;…
实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. BIN升级文件产生方法: 1.编译APP工程,产生.hex文件. 2.将.hex文件拖至HEX2BIN.EXE即可产生.bin文件. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ ; /* USER CODE END 1 */ /* MCU Configuration--------…
实验方法: 1.安装USB CDC驱动,驱动安装方法参考例程包中安装方法文档. 2.将跳线冒跳至USB_OTG,通过Micro USB 线将iCore4 USB-OTG接口与电脑相连. 3.打开上位机软件usb.exe,点击打开,测试按钮即可测试.(如果该软件没能正常启动,则重新安装驱动)实验现象: 核心代码: int main(void) { int i; ; system_clock.initialize();//ϵͳʱÖÓ³õʼ»¯ led.initialize(); //LED³…
实验方法: 1.USB_HID协议免驱动,此例程不需要驱. 2.将跳线冒跳至USB_OTG,通过Micro USB 线将iCore4 USB-OTG接口与电脑相连. 3.打开上位机软件usb_hid.e,即可进行测试. 实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; unsigned ]; unsigned ]; static int counter; RTC_DateTypeDef sDate; RTC_TimeTypeD…
实验现象: 三色led轮流闪烁,具体的逻辑分析仪使用教程请参考iCore3逻辑分析仪例程 核心代码: module signal_ctrl( input clk_25m, input rst_n, output fpga_ledr, output fpga_ledg, output fpga_ledb ); //--------------------cnt_led-------------------------------// reg led_clk; always @(posedge cl…
实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl( input clk_25m, input rst_n, output fpga_ledg ); //--------------------clk_10hz------------------------------// :]cnt; reg clk_10hz; always @(posedge clk_25m or negedge rst_n…
实验现象: 利用Quartus内部组件生成锁相环,用SignalTap II进行校验. 核心代码: module pll( input clk_25m, output clk_100m, output clk_50m, output clk_25m_out, output clk_12_5m, output clk_6_25m ); //--------------------my_pll--------------------------------// my_pll u1( .inclk0(…
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int fsmc_read_data; ; ]; ]; char *p; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash…
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i,j; int res; ]; ; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Sy…
实验现象: 上电即开始读写SDRAM测试,测试过程中,蓝色LED点亮,如果出现错误,红色LED闪烁,测试成功,绿色LED点亮. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i,j; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals…
实验现象: 用电压表测量PA4引脚有2.0V直流电压输出. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the S…
实验现象: 核心代码: int main(void) { led.initialize(); //LED³õʼ»¯ key.initialize(); if(ARM_KEY_STATE == KEY_UP){ //°´¼üËÉ¿ª×´Ì¬Ö±½ÓÌøÏòÓ¦ÓóÌÐò goto start; } system_clock.initialize(); //ϵͳʱÖÓ³õʼ»¯ delay.initialize(); //ÑÓʱ³õʼ»¯ adc.initialize(); //AD…
实验现象: 核心代码: int main(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6|GPIO_PIN_8, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOI, GPIO_PIN_3, GPIO_PIN_SET); /*Configur…
实验现象及操作说明: 1.将升级文件拷入U盘system文件夹中,通过U盘转接线将U盘连接到iCore4 USB OTG接口. 2.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点亮,烧写失败,如果挂载SD卡失败,红灯快闪,如果打开文件失败,蓝灯快闪,读取文件指针移动失败,白灯点亮,升级失败,红灯慢闪. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configurati…
实验现象及操作说明: 1.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点亮,烧写失败,如果挂载SD卡失败,红灯快闪,如果打开文件失败,蓝灯快闪,读取文件指针移动失败,白灯点亮,升级失败,红灯慢闪. 2.上电时按着ARM·KEY,进入虚拟U盘模式,计算机将出现一个磁盘,可将升级文件拷入SD卡. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int k; unsigned int counter; unsigned…
实验现象: 1.先烧写FPGA程序,再烧写ARM程序,ARM程序烧写完毕后即开始读写RAM测试,测试成功,绿色ARM·LED亮,测试失败,红色ARM·LED闪烁. 2.测试成功,ARM通过映射寄存器来控制FPGA三色LED循环点亮. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; /* USER CODE END 1 */ /* MCU Configuration-------------------------------------…
实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.initialize(); my_malloc.initialize(SRAMIN); usart6.initialize(); usart6.printf("\033[1;32;40m"); usart6.printf("\r\nHello, I am iCore4!\r\n\r\…