zju(11)在IAR中移植ucos到msp430
准备材料
1.在TI官网上下载430的固件库,我用的是msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib
地址http://www.ti.com/tool/msp-exp430f5529
下载后解压得到
2.在ucos官网上下载移植430版本的ucos,地址:
http://micrium.com/downloadcenter/download-results/?searchterm=hm-texas-instruments&supported=true
下载安装后得到
3.这一步的资料备用下载地址(14.5.9更新链接):
1)MSP430固件http://pan.baidu.com/s/1c0hAahq
2)IAR x x 版http://pan.baidu.com/s/1o618yDk
3) 我创建的工程http://pan.baidu.com/s/1mgt4Xew
建立和配置工程
1.建立工程目录,并在工程目录下建立F5xx_F6xx_Core_Lib和ucosii两个目录
2.将msp430固件库\slaa448b\F5xx_F6xx_Core_Lib目录下的所有文件拷贝到工程目录下的F5xx_F6xx_Core_Lib文件夹中,这个是msp430cpu操作的一些函数。我们要初始化cpu时钟用。
3.在在工程目录的ucosii下建立ports和source两个目录用来存放ucos系统文件
4.将ucos安装目录\Micrium\Software\uCOS-II\Ports\MSP430X\IAR\MSP430x5xx下的所有文件复制到工程目录下的ports文件夹中
5.将ucos安装目录\Micrium\Software\uCOS-II\Source下的所有文件复制到工程目录下的source文件夹中
6.建立main函数文件,建一个文本文档取名为test.c
7.我们还要借鉴ucos安装的例程给的两个系统配置文件
\Micrium\Software\EvalBoards\TI\MSP-EXP430F5438\IAR\uCOS-II目录里的app_cfg.h和os_cfg.h。将这两个文件拷贝的工程根目录下。app_cfg.h是用户进程的一些配置,比如进程的优先级,进程堆栈的大小等等。os_cfg.h是系统的一些配置,可以开关系统的一些功能,尽量裁剪掉不用的功能可以减少cpu的开销。
8.下面建立一个msp430的空工程并向工程中添加刚才的文件,得到目录如下
9.配置这个工程
9.1.选取相应的芯片型号
9.2.添加工程包含目录
$PROJ_DIR$\F5xx_F6xx_Core_Lib
$PROJ_DIR$\
$PROJ_DIR$\ucosii\ports
$PROJ_DIR$\ucosii\source
9.3.仿真模式改成debug
保存
10.然后开始建立任务
10.1 建立4个任务每个任务闪一个灯和一个启动任务,首先删掉app_cfg.h中的所有内容,写如下代码:
#ifndef __APP_CFG_H__ #define __APP_CFG_H__ #define OS_TASK_TMR_PRIO (OS_LOWEST_PRIO - 4) /* task stack size */ #define STARTUP_TASK_STK_SIZE 128 #define TASK1_STK_SIZE 128 #define TASK2_STK_SIZE 128 #define TASK3_STK_SIZE 128 #define TASK4_STK_SIZE 128 #define STARTUP_TASK_PRIO 4 #define TASK1_PRIO 5 #define TASK2_PRIO 6 #define TASK3_PRIO 7 #define TASK4_PRIO 8 #endif
10.2.这个就是建立的四个任务和一个启动任务的优先级和堆栈大小
下面是任务代码写在test.c中。
OS_STK startup_stk[STARTUP_TASK_STK_SIZE]; OS_STK task1_stk[TASK1_STK_SIZE]; OS_STK task2_stk[TASK2_STK_SIZE]; OS_STK task3_stk[TASK3_STK_SIZE]; OS_STK task4_stk[TASK4_STK_SIZE]; unsigned char os_err; static void task1(void *p_arg) { for (;;) { P1OUT |= BIT1; OSTimeDly(500); P1OUT &= ~BIT1; OSTimeDly(500); } } static void task2(void *p_arg) { for (;;) { P1OUT |= BIT2; OSTimeDly(500); P1OUT &= ~BIT2; OSTimeDly(500); } } static void task3(void *p_arg) { for (;;) { P1OUT |= BIT3; OSTimeDly(500); P1OUT &= ~BIT3; OSTimeDly(500); } } static void task4(void *p_arg) { for (;;) { P1OUT |= BIT4; OSTimeDly(500); P1OUT &= ~BIT4 ; OSTimeDly(500); } } static void startup(void *p_arg) { P1DIR |= BIT1+BIT2+BIT3+BIT4; // P1.0 set as output OS_CPU_SysTickInit(); #if (OS_TASK_STAT_EN > 0) //----统计任务初始化函数 OSStatInit(); #endif os_err = OSTaskCreate(task1, //任务1 (void *)0, //不带参数 (OS_STK *)&task1_stk[TASK1_STK_SIZE - 1],//堆栈指针 (INT8U)5); //优先级 os_err = OSTaskCreate(task2, //任务2 (void *)0, //不带参数 (OS_STK *)&task2_stk[TASK2_STK_SIZE - 1],//堆栈指针 (INT8U)6); //优先级 os_err = OSTaskCreate(task3, //任务3 (void *)0, //不带参数 (OS_STK *)&task3_stk[TASK3_STK_SIZE - 1],//堆栈指针 (INT8U)7); //优先级 // os_err = OSTaskCreate(task4, //任务4 (void *)0, //不带参数 (OS_STK *)&task4_stk[TASK4_STK_SIZE - 1],//堆栈指针 (INT8U)8); OSTaskDel(OS_PRIO_SELF); }
10.3 我们用的ucos系统时钟是看门狗做的,我们要初始化看门狗滴答函数,添加如文件:
void OS_CPU_SysTickInit() { WDTCTL = (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS_4); /*20M/32768=1.6384ms */ SFRIE1 |= 1; /* Enable WDT interrupts */ }
看门狗的中断函数已经写好了在os_cpu_a.s43中:
10.4 下面是初始化cpu时钟 我们把系统时钟初始化到20M用的是内部PLL,(ucos时钟滴答跟这个有直接的关系,最好能保证看门狗可以设置到1ms的时间,当我们用OSTimeDly函数时时间比较直观)函数如下:
#include <msp430f5528.h> #include "HAL_PMM.h" #include "HAL_UCS.h" #include "ucos_ii.h" #define SYS_MCLK_FREQ 20000000 void Init_Clock(void) { SELECT_FLLREF(SELREF__REFOCLK); // Set DCO FLL reference = REFO SELECT_ACLK(SELA__REFOCLK); // Select REFO as ACLK source Init_FLL(SYS_MCLK_FREQ/1000, SYS_MCLK_FREQ/32768); } void InitSys() { /*PMM全部关闭********************************************************/ DISABLE_SVSL(); // SVS Low side is turned off DISABLE_SVML(); // Monitor low side is turned off DISABLE_SVMH(); // Monitor high side is turned off DISABLE_SVSH(); // SVS High side is turned on //DISABLE_SVSH_RESET(); // Enable POR on SVS Event while (((PMMIFG & SVSMLDLYIFG) == 0)&&((PMMIFG & SVSMHDLYIFG) == 0)); // SVSH turns off in LPM3,power-save CLEAR_PMM_IFGS(); __disable_interrupt(); // Disable global interrupts SetVCore(PMMCOREV_3); // USB core requires the VCore set to 1.8 volt, independ of CPU clock frequency Init_Clock(); __enable_interrupt(); // enable global interrupts }
10.5 下面是main函数:直接建立启动任务运行
void main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; // Stop WDT InitSys(); OSInit(); OSTaskCreate(startup, (void *)0, &startup_stk[STARTUP_TASK_STK_SIZE-1], 4); OSStart(); }
这样我们的所有工作完成了,直接编译下载仿真,成功。
效果图:
zju(11)在IAR中移植ucos到msp430的更多相关文章
- 在IAR下移植CC2650 contiki工程
与Instant Contiki相比,在Windows的IAR下开发可以在线仿真,下载也更方便,因此我想把BLEach的工程移植到IAR下.弄了好几天总算编译并且下载成功了,参考了[这篇TI的wiki ...
- 第11讲- Android中进程及其优先级
第11讲Android中进程及其优先级 进程与线程: 进程:操作系统结构的基础,资源分配的最小单元,一个操作系统包括多个进程: 线程:线程存在于进程当中,是操作系统调试执行的最小单元,一个进程包括多个 ...
- Android菜鸟的成长笔记(11)——Android中的事件处理
原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的 ...
- 如何在IAR中配置CRC参数(转)
源:如何在IAR中配置CRC参数 前言 STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间.CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时 ...
- Linux课程---11、Linux中软件安装和调试
Linux课程---11.Linux中软件安装和调试 一.总结 一句话总结: 启动过程:1.安装软件,2.修改配置文件,3.启动服务 查看过程:4.查看进程,5.查看端口 关闭过程:6.关闭软件,7. ...
- 妙味css3课程---1-1、css中自定义属性可以用属性选择器么
妙味css3课程---1-1.css中自定义属性可以用属性选择器么 一.总结 一句话总结:可以的. 1.如何实现用属性选择器实现a标签根据href里面含有的字段选择背景图片? p a[href*=te ...
- 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- 在IAR(EWARM)中移植STM32固件库
一.移植环境说明 (1).win10系统 (2).IAR(EWARM)7.7 (3).STM32标准固件库3.5.0 http://www.st.com/content/st_com/en/produ ...
随机推荐
- 【转】使用jquery animate创建平滑滚动效果
这篇文章主要介绍了使用jquery animate创建平滑滚动效果,效果可以滚动到顶部.到底部或页面中指定地方,生要的是非常平滑,很舒服,需要的朋友可以参考下 滚动到顶部: $('.scroll_to ...
- Liferay 6.2 改造系列之十七:当Portlet无权限时,不显示错误信息
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Set this to true if users are shown ...
- vs 中怎么用c改变部分字体颜色
// test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include< ...
- 浏览器-02 Chromium的多线程
Chromium 的多线程机制 概述 每个进程都有很多的线程; 多线程主要是为了保证UI线程(chrome 线程,主线程)不会被任何其它费时的操作阻碍而影响对用户的响应; 为了解决多线程通信和同步问题 ...
- 使用Genymotion安装APK出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE的解决办法
当我们安装好Genymotion后,把Android运用部署到上面调试时,console控制台会报错:Installation error: INSTALL_FAILED_CPU_ABI_INCOMP ...
- MFC MSBDutyTable下载地址
点击此处跳转到下载地址 简明教程: 对于非制表人,只需要添加空余时间-新建,然后点星期和节数有课的那个按钮,勾选自己有课的周数.全部勾好后,生成空余时间表.然后查看自己的空余时间表,并导出,发给制表人 ...
- Android 魅族等SmartBar适配
通过反射获取是否含有SmartBar: /** * 判断是否有SmartBar */ private boolean hasSmartBar() { // SP存储是否显示SmartBar if (! ...
- ACM cigarettes
cigarettes 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 Tom has many cigarettes. We hypothesized that he ...
- CODEVS 1817 灾后重建 Label:Floyd || 最短瓶颈路
描述 灾后重建(rebuild) B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...
- win8.1上wamp环境中利用apache自带ab压力测试工具使用超简单讲解
2015.10.4apache自带ab压力测试工具使用:本地环境:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一 ...