目录

前言

一、获取uc/OS-III源码

二、项目导入文件夹

2.1文件的整理

2.2导入源码

2.3STM32CubeMX创建框架

​ ​ 三、添加代码

3.1将源码文件复制到指定文件夹下

​ 3.2添加文件

3.3添加文件路径

四、修改代码

4.1修改start up文件

4.2修改CONFIG/app_cfg.h

​ 4.3修改CONFIG/includes.h

4.4修改BSP/bsp.c

4.5bsp.h

4.6CONFIG/lib_cfg.h

4.7usart.c

4.8main.c

五、运行结果

心得体会

参考文献



前言

μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。 μC/OS-II已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准。现在最新版的是μC/OS-III。

一、获取uc/OS-III源码

百度链接:https://pan.baidu.com/s/14rrirGKKcvdtkkEJIaidxA 
提取码:o3co

二、项目导入文件夹

2.1文件的整理

(1)新建两个文件夹uC-BSP和uC-CONFIG,后面会用到

(2)在刚才创建的uC-BSP创建bsp.c和bsp.h文件

2.2导入源码

将下图文件复制到新建的文件加uC-CONFIG下

2.3STM32CubeMX创建框架

将管脚PB1、PB0设置为GPIO管脚OUT PUT来观察两个TASK下的LED灯闪烁,并且设置PA10为USART-RX,PA9设置为USART-TX,管脚PA13设置为SYS,PD1设置为RCC_OSC_IN,PD2设置为RCC_OSC_OUT,

此外还需要设置SYS

并且设置RCC

 设置时钟为72MHZ

之后生成MDK5工程

  三、添加代码

3.1将源码文件复制到指定文件夹下

 3.2添加文件

在MDK5中添加六个文件CPU、LIB、PORT、SOURCE、CONFIG、BSP

(1)并在BSPfile下添加刚刚创建的空白文件bsp.c和bsp.h

(2)在文件CONFIG下添加file8个

(3) 在文件SOURCE添加file20个,从文件目录MDK-ARM/uCOOS-III/Source

(4)在文件PORT下添加file3个,从文件目录下MDK-ARM/uCOS-III/Ports/ARM-Cortex-M3/Geneic/RealView

(5)在文件CPU下添加file6个

其中包括uC-CPU下的3个和MDK-ARM/uC-CPU/ARM-Cortex-M3/Realview下的3个

(6)LIB下添加10个

3.3添加文件路径

将如图所示的8个文件加入

四、修改代码

4.1修改start up文件

PendSV_Handler修改为OS_CPU_PendSVHandler

SysTick_Handler 修改为OS_CPU_SysTickHandler

在函数中有两个地方需要进行修改

4.2修改CONFIG/app_cfg.h

#define APP_CFG_SERIAL_EN        DEF_ENABLED 修改为

#define APP_CFG_SERIAL_EN        DEF_DISABLED

#define APP_TRACE BSP_Ser_Printf 修改为#define APP_TRACE (void)

 4.3修改CONFIG/includes.h

在#include<bsp.h>后加上    #include “gpio.h”         #include “app_cfg.h”

将#include <stm32f10x_lib.h> 改为 #include “stm32f1xx_hal.h”

4.4修改BSP/bsp.c

// bsp.c
#include "includes.h"#define  DWT_CR      *(CPU_REG32 *)0xE0001000
#define  DWT_CYCCNT  *(CPU_REG32 *)0xE0001004
#define  DEM_CR      *(CPU_REG32 *)0xE000EDFC
#define  DBGMCU_CR   *(CPU_REG32 *)0xE0042004#define  DEM_CR_TRCENA                   (1 << 24)
#define  DWT_CR_CYCCNTENA                (1 <<  0)CPU_INT32U  BSP_CPU_ClkFreq (void)
{return HAL_RCC_GetHCLKFreq();
}void BSP_Tick_Init(void)
{CPU_INT32U cpu_clk_freq;CPU_INT32U cnts;cpu_clk_freq = BSP_CPU_ClkFreq();#if(OS_VERSION>=3000u)cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;#elsecnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;#endifOS_CPU_SysTickInit(cnts);
}void BSP_Init(void)
{BSP_Tick_Init();MX_GPIO_Init();
}#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
void  CPU_TS_TmrInit (void)
{CPU_INT32U  cpu_clk_freq_hz;DEM_CR         |= (CPU_INT32U)DEM_CR_TRCENA;                /* Enable Cortex-M3's DWT CYCCNT reg.                   */DWT_CYCCNT      = (CPU_INT32U)0u;DWT_CR         |= (CPU_INT32U)DWT_CR_CYCCNTENA;cpu_clk_freq_hz = BSP_CPU_ClkFreq();CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
}
#endif#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_TS_TMR  CPU_TS_TmrRd (void)
{return ((CPU_TS_TMR)DWT_CYCCNT);
}
#endif#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
CPU_INT64U  CPU_TS32_to_uSec (CPU_TS32  ts_cnts)
{CPU_INT64U  ts_us;CPU_INT64U  fclk_freq;fclk_freq = BSP_CPU_ClkFreq();ts_us     = ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us);
}
#endif#if (CPU_CFG_TS_64_EN == DEF_ENABLED)
CPU_INT64U  CPU_TS64_to_uSec (CPU_TS64  ts_cnts)
{CPU_INT64U  ts_us;CPU_INT64U  fclk_freq;fclk_freq = BSP_CPU_ClkFreq();ts_us     = ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us);
}
#endif

4.5bsp.h

// bsp.h
#ifndef  __BSP_H__
#define  __BSP_H__#include "stm32f1xx_hal.h"void BSP_Init(void);#endif

4.6CONFIG/lib_cfg.h

lib_cfg.h里修改堆空间的宏定义,它原本是27K,但这块板子RAM一共才20k,修改为5k

4.7usart.c

(1)参数设置

(2)加入头文件

(3)加入printf函数

/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f){HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);return ch;
}
/* USER CODE END 1 */

4.8main.c

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"
#include "usart.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <includes.h>
#include "stm32f1xx_hal.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* 任务优先级 */
#define START_TASK_PRIO     3
#define LED0_TASK_PRIO      4
#define MSG_TASK_PRIO       5
#define LED1_TASK_PRIO      6/* 任务堆栈大小  */
#define START_STK_SIZE      96
#define LED0_STK_SIZE       64
#define MSG_STK_SIZE        64
#define LED1_STK_SIZE       64/* 任务栈 */
CPU_STK START_TASK_STK[START_STK_SIZE];
CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
CPU_STK MSG_TASK_STK[MSG_STK_SIZE];
CPU_STK LED1_TASK_STK[LED1_STK_SIZE];/* 任务控制块 */
OS_TCB StartTaskTCB;
OS_TCB Led0TaskTCB;
OS_TCB MsgTaskTCB;
OS_TCB Led1TaskTCB;/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* 任务函数定义 */
void start_task(void *p_arg);
static  void  AppTaskCreate(void);
static  void  AppObjCreate(void);
static  void  led_pb0(void *p_arg);
static  void  send_msg(void *p_arg);
static  void  led_pb1(void *p_arg);
/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/**Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/**Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{OS_ERR  err;OSInit(&err);HAL_Init();SystemClock_Config();//MX_GPIO_Init(); 这个在BSP的初始化里也会初始化MX_USART1_UART_Init();  /* 创建任务 */OSTaskCreate((OS_TCB     *)&StartTaskTCB,                /* Create the start task                                */(CPU_CHAR   *)"start task",(OS_TASK_PTR ) start_task,(void       *) 0,(OS_PRIO     ) START_TASK_PRIO,(CPU_STK    *)&START_TASK_STK[0],(CPU_STK_SIZE) START_STK_SIZE/10,(CPU_STK_SIZE) START_STK_SIZE,(OS_MSG_QTY  ) 0,(OS_TICK     ) 0,(void       *) 0,(OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR     *)&err);/* 启动多任务系统,控制权交给uC/OS-III */OSStart(&err);            /* Start multitasking (i.e. give control to uC/OS-III). */}void start_task(void *p_arg)
{OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;/* YangJie add 2021.05.20*/BSP_Init();                                                   /* Initialize BSP functions *///CPU_Init();//Mem_Init();                                                 /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err);       //统计任务
#endif#ifdef CPU_CFG_INT_DIS_MEAS_EN            //如果使能了测量中断关闭时间CPU_IntDisMeasMaxCurReset();
#endif#if   OS_CFG_SCHED_ROUND_ROBIN_EN         //当使用时间片轮转的时候//使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5msOSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif      OS_CRITICAL_ENTER();    //进入临界区/* 创建LED0任务 */OSTaskCreate((OS_TCB   * )&Led0TaskTCB,        (CPU_CHAR   * )"led_pb0",         (OS_TASK_PTR )led_pb0,          (void       * )0,                   (OS_PRIO      )LED0_TASK_PRIO,     (CPU_STK   * )&LED0_TASK_STK[0], (CPU_STK_SIZE)LED0_STK_SIZE/10, (CPU_STK_SIZE)LED0_STK_SIZE,        (OS_MSG_QTY  )0,                    (OS_TICK      )0,                   (void       * )0,                   (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR   * )&err);       /* 创建LED1任务 */OSTaskCreate((OS_TCB  * )&Led1TaskTCB,        (CPU_CHAR   * )"led_pb1",         (OS_TASK_PTR )led_pb1,          (void       * )0,                   (OS_PRIO      )LED1_TASK_PRIO,     (CPU_STK   * )&LED1_TASK_STK[0], (CPU_STK_SIZE)LED1_STK_SIZE/10, (CPU_STK_SIZE)LED1_STK_SIZE,        (OS_MSG_QTY  )0,                    (OS_TICK      )0,                   (void       * )0,                   (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR   * )&err);                                        /* 创建MSG任务 */OSTaskCreate((OS_TCB  * )&MsgTaskTCB,     (CPU_CHAR   * )"send_msg",        (OS_TASK_PTR )send_msg,             (void       * )0,                   (OS_PRIO      )MSG_TASK_PRIO,       (CPU_STK   * )&MSG_TASK_STK[0], (CPU_STK_SIZE)MSG_STK_SIZE/10,  (CPU_STK_SIZE)MSG_STK_SIZE,     (OS_MSG_QTY  )0,                    (OS_TICK      )0,                   (void       * )0,               (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR  * )&err);OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);       //挂起开始任务             OS_CRITICAL_EXIT();    //进入临界区
}
/*** 函数功能: 启动任务函数体。* 输入参数: p_arg 是在创建该任务时传递的形参* 返 回 值: 无* 说    明:无*/
static  void  led_pb0 (void *p_arg)
{OS_ERR      err;(void)p_arg;BSP_Init();                                                 /* Initialize BSP functions                             */CPU_Init();Mem_Init();                                                 /* Initialize Memory Management Module                  */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err);                               /* Compute CPU capacity with no task running            */
#endifCPU_IntDisMeasMaxCurReset();AppTaskCreate();                                            /* Create Application Tasks                             */AppObjCreate();                                             /* Create Application Objects                           */while (DEF_TRUE){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 1, 0,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 1, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}static  void  led_pb1 (void *p_arg)
{OS_ERR      err;(void)p_arg;BSP_Init();                                                 /* Initialize BSP functions                             */CPU_Init();Mem_Init();                                                 /* Initialize Memory Management Module                  */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err);                               /* Compute CPU capacity with no task running            */
#endifCPU_IntDisMeasMaxCurReset();AppTaskCreate();                                            /* Create Application Tasks                             */AppObjCreate();                                             /* Create Application Objects                           */while (DEF_TRUE){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 3, 0,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 3, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}static  void  send_msg (void *p_arg)
{OS_ERR      err;(void)p_arg;BSP_Init();                                                 /* Initialize BSP functions                             */CPU_Init();Mem_Init();                                                 /* Initialize Memory Management Module                  */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err);                               /* Compute CPU capacity with no task running            */
#endifCPU_IntDisMeasMaxCurReset();AppTaskCreate();                                            /* Create Application Tasks                             */AppObjCreate();                                             /* Create Application Objects                           */while (DEF_TRUE){printf("hello uc/OS \r\n");OSTimeDlyHMSM(0, 0, 2, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/* USER CODE BEGIN 4 */
/*** 函数功能: 创建应用任务* 输入参数: p_arg 是在创建该任务时传递的形参* 返 回 值: 无* 说    明:无*/
static  void  AppTaskCreate (void)
{}/*** 函数功能: uCOSIII内核对象创建* 输入参数: 无* 返 回 值: 无* 说    明:无*/
static  void  AppObjCreate (void)
{}/* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{ /* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

将此部分代码代替原来main.c的代码段。

五、运行结果

心得体会

整个实验下来,比较容易出现错误的是在添加文件的那八个步骤,很容易就出现添加混乱错误的情况,因为文件太多看的眼花缭乱所以需要自己更加努力。而且在后面在代码改头文件的时候容易看漏,这个需要更加仔细的在全部代码里面搜索。最后做出实验结果很有成就感,继续努力。

参考文献

基于stm32cubemx移植uC/OS-III操作系统_Laul Ken-Yi的博客-CSDN博客目录一、获取uC/OS-III源码二、文件夹整理2.1 新建文件夹2.2 创建空文件2.3 导入源码2.4 创建基础stm32框架2.5 导入文件和增加头函数路径2.6 打开keil,增加item​2.6.1 并在BSP,file下添加刚刚创建的空白文件bsp.c和bsp.h。2.6.2 在CONFIG下添加file,8个2.6.3 在SOURCE添加file,20个2.6.4 PORT下添加file,3个2.6.5 CPU下添加file,6个​2..https://blog.csdn.net/qq_60678931/article/details/121618935?spm=1001.2014.3001.5501STM32F103C8移植uCOSIII(HAL库)_junseven164的博客-CSDN博客少年一、随笔二、uCOSIII源码三、项目导入文件整理四、导入文件和增加头函数路径五、代码改动六、参考资料一、随笔移植一个嵌入式系统用了一天时间,只能说不愧是我,在不了解的情况下还是少一些自己的操作,自己挖坑埋自己。记录一下过程和踩过的坑。二、uCOSIII源码官网上可以去下,但是比较麻烦,就不多描述了,这里放一份源码(百度网盘的),提取码1111https://pan.baidu.com/s/1jCoc2sfiij78J0Q-C6ChmA三、项目导入文件整理在这个页面建立这两个https://blog.csdn.net/junseven164/article/details/121534916STM32F103C8T6移植uCOS基于HAL库_机智的橙子的博客-CSDN博客文章目录一.使用CubeMX建立STM32F103C8T6HAL库二.准备uCOSIII源码三.移植前准备1.为uC-BSP文件夹新建bsp.c和bsp.h文件2.给文件夹uC-CONFIG添加以下文件(从以下路径复制过来)3.将uCOS相关文件复制到HAL工程的MDK-ARM文件夹下四.开始移植1.将uCOS文件添加到项目2.为bsp.c和bsp.h添加代码3.修改main.c文件代码4.修改其余文件部分代码5.参数配置五.运行六.总结七.参考链接一.使用CubeMX建立STM32F103C8T6HALhttps://blog.csdn.net/qq_45659777/article/details/121570886

STM32F103-uc/OS系统移植相关推荐

  1. -uc/OS系统移植(基于STM32F103C8T6,超详细讲解)

    完成STM32F103C8基于HAL库的-uc/OS系统移植 一.创建HAL库 二.下载uc/OSIII源码及移植准备 1.下载uc/OSIII源码 2.将uc/OS源码文件复制到工程 三.将uc/O ...

  2. 基于STM32的uc/OS系统移植及用Saleae Logic 16抓取分析波形

    文章目录 一.关于uc/OS系统 1.操作系统与裸机的区别 2.uc/OS运行流程 二.详细移植过程 1.STM32Cubex创建工程 2.为工程添加源码 3.添加头文件路径 4.添加代码 1)bsp ...

  3. 基于STM32F103RC移植uc/OS系统

    目录 一.获取uc/OS-III源码 二.使用CubeMX创建基础stm32框架 三.文件准备 四.路径添加 五.代码修改 六.成功展示 七.使用Keil仿真逻辑仪观察引脚电平变化 八.参考资料 本文 ...

  4. 0 uC/OS 系统精讲索引

    uC/OS-II与uC/OS-III放在一起讲,每个例程同时提供两个版本的源代码. 本系列教程主要涉及如下内容: [原理部分] 1-操作系统简介:基本概念 2-目录结构与测试环境搭建:uC/OS-II ...

  5. uC/OS-III系统移植STM32F103C8

    本实验是将嵌入式实时操作系统移植入STM32系列开发板,并完成一些基础的指令任务.此次实验采用的芯片为STM32F103C8 目录 一.使用STM32CUBEMX建立STM HEL 库工程 二.准备u ...

  6. STM32F103C8T6移植uc/OS

    STM32F103C8T6移植uc/OS STM32F103C8T6移植uc/OS STM32F103C8T6移植uc/OS 一.题目要求 二.使用STM32CubeMX建立HAL库 三.准备uCOS ...

  7. 嵌入式系统 操作系统 uC/OS uClinux

    摘要:嵌入式操作系统是嵌入式系统应用的核心软件.本文通过对两种典型的开源嵌入式操作系统的对比,分析和总结嵌入式操作系统应用中的若干问题,归纳嵌入式操作系统的选型依据. 关键词:嵌入式系统 操作系统 u ...

  8. uC/OS和uClinux的比较

    摘    要: 嵌入式操作系统是嵌入式系统应用的核心.本文通过对两种典型的开源嵌入式操作系统的对比,分析和总结了嵌入式操作系统应用中的若干问题,归纳了嵌入式操作系统的选型依据. 引言     随着现代 ...

  9. UC/OS和UCLinux比较

    随着现代计算机技术的飞速发展和互联网技术的广泛应用,从pc时代过渡到了以个人数字助理.手持个人电脑和信息家电为代表的3c(计算机.通信.消费电子)一体的后pc时代.后pc时代里,嵌入式系统扮演了越来越 ...

最新文章

  1. 告诫那些有创业梦的大学生,切记千万不要盲目创业!
  2. 如何通过代码连接SQL Server数据库
  3. JAVA基础中容易踩坑的知识点
  4. 贷款100万到手97万,这样合理吗?
  5. android之多媒体篇(一)
  6. javascript 中文与Unicode相互转化
  7. 刷新SOTA!Salesforce提出跨模态对比学习新方法,仅需4M图像数据!
  8. 实践中整理出tomcat集群和负载均衡
  9. HDU 2686 多线程DP
  10. 38K红外遥控发射与接收电路设计与选型、正向压降、限流电阻、半值角
  11. MIT机器人闭上眼睛,靠触觉也爬得上凶险的楼梯 | 施工未完成
  12. 4----apache主配置文件模板和基于域名虚拟主机配置文件模板
  13. python学到什么程度可以找到工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  14. python画三维图-Python使用matplotlib绘制三维图形示例
  15. Xorg可以使用hot-plug了,不过配置很麻烦
  16. MVC学习系列7--下拉框的联动
  17. DAG最小可重路径覆盖or最长反链的一种做法
  18. java数组base64编码,java将base64编码字符串还原为字节数组
  19. java两天速成_JAVA速成
  20. 计算机根号函数,excel公式中开根号是哪一个函数啊(excel开根号的公式)

热门文章

  1. 关于解决多显示器Fliqlo无法正常显示的方法
  2. Deep Learning — LeCun, Yann, Yoshua Bengio and Geoffrey Hinton
  3. 翁恺老师——指针变量和输入地址的变量
  4. MYSQL 增加唯一索引对于重复数据的处理
  5. 解决EXCEL中选中单元格右键被屏蔽的问题
  6. python接口测试,获取响应文本中的token并传入下一方法
  7. VuePress的安装及设置
  8. PMP项目管理证书过期了还可以续证吗?
  9. 2021牛年的春节一个人过
  10. 什么是进程➡进程调度