This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430编译器使用经验与技巧集锦!

Other Parts Discussed in Thread: ENERGIA, MSP430G2553, ENERGYTRACE, MSP430FR5969, MSP430F5438A, MSP430F5438, MSP430F149, MSP430G2231, MSP430AFE253, MSP430F2012

在这里给大家汇总了一些工程师使用MSP430编译器的经验与技术,主要是CCS、EnergiaI或IAR等编译器的使用技巧、开发经历供大家分享!


  • 作者:mars4zhu

    题目:【MSP430 编译器使用经验】-使用CCS调试Energia项目

    本文简要介绍了使用TI-Launchpad系列的类arduino开发环境——Energia项目开发过程,并着重介绍了采用CCSv6.0Energia项目的代码进行调试。

    目  录
    1 概述        1
    2 Energia项目开发流程简介       
    2.1. Energia介绍与编译过程       
    2.2. Energia安装与设置       
    2.3. Energia项目开发流程简介       
    3 使用CCS调试Energia项目       
    3.1. CCS导入Energia项目       
    3.2. CCS编译Energia项目       
    3.3. CCS调试Energia项目       

    概述

    本文简要介绍了使用TI-Launchpad系列的类arduino开发环境——Energia项目开发过程,并着重介绍了采用CCSv6.0对Energia项目的代码进行调试。
    硬件平台:TI-Launchpad G2553
    软件平台:Energia 0101E0012;CCS V6.0.1

    Energia项目开发流程简介

    本章介绍Energia开发环境,并简要记录采用Energia IDE进行Launchpad开发的流程。

    2.1. Energia介绍与编译过程

    Energia是类似于Arduino的开发环境,Arduino是流行的电子快速原型搭建开发平台,介绍如下:
    “The open-source Arduino environment makes it easy to write code and upload it to the i/o board. It runs on Windows, Mac OS X, and Linux. The environment is written in Java and based on Processing, avr-gcc, and other open source software. “【1】
    Energia采用与arduino同样的软件结构,IDE集成各项功能菜单与编辑器,在编辑完成Energia项目文件(.ino后缀)后,Energia根据IDE的设置,先将ino文件转成cpp文件,然后调用自带的编译器(hardware\tools目录下),对cpp编译成目标文件(.o后缀),同时也将对应的开发板核心库(core library,在hardware\msp430目录下)cpp文件编译,然后将所有目标文件(.o后缀)连接,生成elf格式,最后生成.hex文件。

    2.2. Energia安装与设置

    在官网energia.nu下载Energia软件包(.zip文件),解压并启动Energia后,默认打开以sketch_mmmdda(mmmdd代表当天的日期,a表示第一个项目,再次新建则为b)的新建空白工程(仅仅一个.ino文件,空白的setup()和loop()函数)。
    为了更详细的了解Energia编译过程,需要进行一些设置,在Energia中点击File->Preference,进入首选项设置页面,如下:
    图 2-1 Energia IDE的首选项设置
    选择”Show verbose output during []compilation []upload”,两个都勾选上,即在Energia的控制台输出编译和“上传”(将编译后的二进制hex文件烧写入板子上的芯片,通常称之为“编程”、“烧写”或“下载”),也可点击”More preferences can be edited directlty in the file”,打开preference.txt文件进行编辑,修改如下行为true
    build.verbose=true
    upload.verbose=true
    同时为了得到Energia转化的cpp文件以及编译后的.o文件、hex文件等,可以设置编译输出目录,即增加如下行:
    build.path=YOUR\OUTPUT\PATH

    2.3. Energia项目开发流程简介

    连接好Launchpad,并安装好驱动(参考Launchpad用户手册,不再赘述),在Energia的菜单Tools->Board选择对应的Launchpad(本例为“Launchpad w/msp430g2553 (16MHz)),同时在Tools->Serial Port选择对应的串口号(COMx)。
    参考范例Blinky程序,编写代码如下
    1. /*
    2.   Blink
    3.   Turns on an LED on for one second, then off for one second, repeatedly.
    4.   This example code is in the public domain.
    5. */
    6. int brightness = 0;    // how bright the LED is
    7. int fadeAmount = 20;    // how many points to fade the LED by
    8. void setup() {                
    9.   // initialize the digital pin as an output.
    10.   // Pin 14 has an LED connected on most Arduino boards:
    11.   pinMode(14, OUTPUT);    
    12.   pinMode(GREEN_LED, OUTPUT); 
    13.   Serial.begin(9600);
    14.   pinMode(PUSH2, INPUT_PULLUP);
    15. }
    16. void loop() {
    17.   int sensorValue = analogRead(A0);
    18.   Serial.println(sensorValue);
    19.   sensorValue = digitalRead(PUSH2);
    20.   Serial.println(sensorValue);
    21.   
    22.   analogWrite(GREEN_LED, brightness);    
    23.   // change the brightness for next time through the loop:
    24.   brightness = brightness + fadeAmount;
    25.   // reverse the direction of the fading at the ends of the fade: 
    26.   if (brightness <= 0 || brightness >= 255) {
    27.     fadeAmount = -fadeAmount ; 
    28.   }
    29.   delay(200);              // wait for 0.2 second
    30. }
    复制代码
    保存后,点击Sketch->Verify/Compile,即刻完成项目的cpp文件转换、编译、连接和hex文件生成,可以在Energia下方的控制台输出看到如下输出信息:
    图 2-2 Energia编译输出信息
    同时在设置的输出目录中看到有大量文件,包括.cpp  .o  .d  .efl  .hex等格式的文件,分别是转换后的项目cpp文件,项目以及库cpp文件编译后的目标文件.o,连接后的可执行文件.elf,以及最终的二进制下载文件.hex
    编译成功后,即刻点击File->Upload,将生成的hex文件上传(下载)到Launchpad
    的芯片里,即刻完成芯片的烧写。之后就可以看到LED在渐亮渐灭,同时点击Tools->Serial Monitor,可以看到串口输出信息。
    图 2-3 Energia 运行截图

    使用CCS调试Energia项目

    目前最新版的CCSV6.0.1(截止2014-08-17),新的版本具有导入Energia项目并进行源代码级的编辑、调试开发功能。本章简要记录使用CCS导入、编译、调试Energia项目的过程。

    3.1. CCS导入Energia项目

    打开CCS,在Project菜单栏下选择”Import Energia Project”,选择对应的Targetmsp430/lm4f),Launchpad。并选择Energia项目。
    图 3-1 CCS导入Energia项目
    Project Explorer面板上看到CCS新建了一个跟Energia项目同名的项目,以及一个”xxxx-core”的项目,并导入了生成的cpp文件作为源代码文件。打开可见该文件时已经经过转换后的cpp文件,对比发现该cpp文件与Energia输出目录下的cpp文件基本相同。

    3.2. CCS编译Energia项目

    CCS在导入Energia项目时,也导入了必须依赖的Energia核心库(core),编译Energia项目之前必须先编译核心库项目,可以在Energia项目的Dependency里面(在Project ExplorerEnergia项目右键->Property->Build->Dependency标签页)看到:
    图 3-2 CCS建立的Energia编译依赖项目
    可以看到在core项目中,有各个cpp文件,都是arduino核心库的源文件,点击main.cpp,可以看到main函数如下:
    1. #include <Energia.h>
    2. int main(void)
    3. {
    4.         init();
    5.         setup();
    6.         for (;;) {
    7.                 loop();
    8.                 if (serialEventRun) serialEventRun();
    9.         }
    10.         return 0;
    11. }
    复制代码
    无需做任何改动,点击Project->Build Project,即可看到在console面板输出编译信息,最终编译成功。

    3.3. CCS调试Energia项目

    点击Debug图标,即刻看到CCS完成二进制文件下载,并进入调试界面,这时候就可以利用CCS的强大的调试功能进行调试。

    nt>项目的Dependency里面(在Project ExplorerEnergia项目右键->Property->Build->Dependency标签页)看到:

      

    图片7.png (76.67 KB, 下载次数: 0)

    图 3-4 CCS调试Energia项目
  • 作者:mars4zhu

    题目:使用CCS优化msp430的设计与编译

    目  录
    1 概述        
    2 ULP Advisor简介与优化流程        
    2.1. ULP Advisor简介        
    2.2. ULP Advisor设置        
    2.3. ULP Advisor的运行与优化        
    3 Optimizer Assistant简介与优化流程        
    3.1. Optimizer Assistant简介        
    3.2. Optimizer Assistant优化编译流程        


    概述

    本文简要介绍了使用CCSv6.0的低功耗优化建议ULP Advisor编译优化助手Optimizer Assistant对msp430的项目进行设计优化和优化编译。
    硬件平台:TI-Launchpad FR5969
    软件平台:CCS V6.0.1

    ULP Advisor简介与优化流程

    本章介绍采用ULP Advisormsp430芯片的设计进行低功耗优化

    2.1. ULP Advisor简介

    CCS集成的ULP Advisor内建了许多低功耗规则,在编译期间扫描这个项目的代码,查找是否具有满足规则的低功耗运行,并给出相应的建议。

    2.2. ULP Advisor设置

    设置ULP在右键的Property里面,选择如下图,勾上所有的选项:
    图 2-1  ULP Advisor的首选项设置

    2.3. ULP Advisor的运行与优化

    编译项目,则可以在console面板看到优化信息,同时打开Advice面板,可以看到更多的优化建议,如下图:

      

    图 2-2  ULP advisor输出的优化建议
    其中建议在console面板和advice面板中输出。可以看到其中提示没有使用低功耗模式(规则ULP 1.1),以及PortB没有初始化(规则ULP 4.1),给出了两条重要的建议。
    根据建议,增加如下代码:
    1. ......
    2. PBDIR = 0xFFFF;
    3. .....
    4. __bis_SR_register(LPM3_bits | GIE);   // Enter LPM3, wait for ~1sec timer  
    5. ......
    优化后再次编译,则这两项建议没有输出了,证明已经达到了优化目的。

    Optimizer Assistant简介与优化流程

    本章介绍采用ULP Advisormsp430芯片的设计进行编译优化

    3.1. Optimizer Assistant简介

    Optimizer Assistant则是采用批量化编译,对比编译后的二进制文件大小,从而确定编译器的优化选项(-Ox)和 速度与代码大小折中优化选项(-opt-for-speed, -mf)。
    建立好msp430项目并完成代码编写、调试之后,最后一步可以采用Optimizer Assistant,对项目的编译优化选项进行优化设置。

    3.2. Optimizer Assistant优化编译流程

    打开菜单栏的Window->Show View->Optimizer Assistant,然后点击Start Analysis
    图 3-1  ULP advisor输出的优化建议
    选择Speed vs. Size,点击Start,则可以看到编译器在一趟趟地编译,并最后列举出编译后的代码大小,可供开发人员参考。
    图 3-2  Optimizer Assitant在不同Optimization Level下编译的代码大小
    图 3-3  Optimizer Assitant在不同Size vs Speed Setting下编译的代码大小
    鼠标移动到最优化的编译输出后,可以点击Applay this settings......即可应用该优化选项,最终优化选项在项目的Property里面设置如下:
    图 3-4  Optimizer Assitant最终优化得出的编译选项
    至此,Optimizer Assistant完成了项目的编译优化,需要注意的是,code size越小,可能导致代码执行效率降低,最终如何确定编译优化选项,需要开发者进行选择折中。


  • 作者:mars4zhu

    题目:使用CCS的Energy Trace调试msp430的低功耗运行

    本文简要介绍了使用CCSv6.0的低功耗测量评估工具Energy Trace对msp430芯片的低功耗运行进行优化
    目  录
    1 概述        
    2 Energia项目开发流程简介        
    2.1. Energy Trace介绍        
    2.2. Energy Trace的设置        
    2.3. Energy Trace的运行        
    2.4. Energy Trace的低功耗优化对比分析        

    概述

    本文简要介绍了使用CCSv6.0的低功耗测量评估工具Energy Trace对msp430芯片的低功耗运行进行优化。。
    硬件平台:TI-Launchpad FR5969
    软件平台:CCS V6.0.1

    Energia项目开发流程简介

    本章介绍CCSmsp430低功耗测量评估工具——Energy Trace,并简要记录采用Energy Tracemsp430的低功耗运行进行优化的流程。

    2.1. Energy Trace介绍

    Energy TraceTImsp430系列芯片开发的,利用支持Energy Trace功能的Debugger,可以在CCS的调试界面显示芯片的运行功耗,从而帮助开发者对芯片的低功耗运行进行优化,以下是官方文档描述:
    The EnergyTrace™ Technology is an energy-based code analysis tool set that is useful for measuring and viewing the applications energy profile and optimizing it for ultra-low power consumption.
    MSP430 devices with built-in EnergyTrace+[CPU State]+[Peripheral States] (or in short EnergyTrace++) support allow real-time monitoring of many internal device states while normally executing user program code. EnergyTrace++™ is supported on selected MSP430 devices and debuggers.
    The EnergyTrace mode (baring the ++) is the base of EnergyTrace™ Technology and enables analog energy measurement to determine the energy consumption of an application, without the possibility to correlate it to internal device information. The EnergyTrace mode is available for all MSP430 devices with selected debuggers. 
    简而言之,Energy Trace是利用支持该功能的DebuggerEzFET等)对目标芯片供电,并测量供电输出电流(以及电压)大小,从而计算功耗,进而确定功耗优化选择。
    Energy Trace++则是通过调试器对支持该功能的芯片(不是所有430的芯片都支持),通过读取芯片内部功耗模式、时钟、外设使能等信息,从而估算芯片的功耗,进而确定功耗优化选择。

    2.2. Energy Trace的设置

    Energy Trace需要在菜单栏的Window->Preferences->Code Composer Studio->Advanced Tools->EnergyTrace™ Technology.里面设置如下图:


    图 2-1  Energy Trace设置界面
    同时,对于建立的项目,需要勾选“超低功耗模式的调试”
    图 22  Project的低功耗调试模式设置界面

    2.3. Energy Trace的运行

    连接好Launchpad,并安装好驱动(参考Launchpad用户手册,不再赘述),打开EnergyTrace_Hands_On的项目,右键项目,选择Build Configurations->Set Active->Insufficient,则Insufficient.c导入项目,代码如下:
    1. /*
    2. /
    3. //  MSP430FR59xx EnergyTrace Demo- High Energy Consumption Code
    4. //
    5. //   Description: This code is intentionally written inefficiently in order
    6. //   to use an unnecessary amount of energy. The ULP Advisor and EnergyTrace
    7. //   are used to help identify the problem areas in the code to point out
    8. //   where changes can be made to increase efficiency.
    9. //
    10. //   About every second, an ADC temperature sample is taken and the degrees
    11. //   Celsius and Fahrenheit are found using floating point calculations.
    12. //   The results are printed and transmitted through the UART.
    13. //   Some examples of the inefficient coding styles used are:
    14. //      sprintf()
    15. //      Floating point operations
    16. //      Divide operations
    17. //      Flag polling
    18. //      Software delays
    19. //      Floating port pins
    20. //      No use of low-power modes
    21. //      Counting up in loops
    22. //
    23. //   B. Finch
    24. //   Texas Instruments Inc.
    25. //   June 2014
    26. //   Built with Code Composer Studio v6.0
    27. #include <stdio.h>
    28. #include <msp430.h>
    29. #include <stdint.h>
    30. .....
    31.     UCA0CTLW0 &= ~UCSWRST;                    // Enable eUSCI_A
    32.     __no_operation();                         // SET A BREAKPOINT HERE
    33.     while(1)
    34.     {
    35.        ....
    36.             while(UCA0STATW & UCBUSY);
    37.             __no_operation();                 // For debugger
    38.         }
    39.     }
    40. }
    点击Debug后,在调试界面的菜单栏选择Windows->Show View->Others,选择Energy Trace,进入Energy Trace分析界面。选择测量记录时间为10s,如下:
    图 2-3  设置Energy Trace的分析时间为10s截图
    Energy Trace主要包括Profile,以及Energy Profile(Energy Trace++ Profile)StatePower四个标签页,以曲线形式表示功耗大小。Energy Trece Profile对功率、电压、电流的最大值、平均值、最小值计算,同时估算采用CR2032纽扣电池供电的持续运行时间。而Energy Trace++ Profile则记录各个时间点CPU的运行模式、各个外设、时钟等信息。
    点击run,则Energy Trace自动记录芯片在10s内的功耗曲线。
    点击Profile标签页的保存按钮   ,将结果保存到一个文件。

    2.4. Energy Trace的低功耗优化对比分析

    结束调试,在Project Explorer里选择项目的Build Configuration选择Most Efficient,并编译调试,同样保存10sEnergy Trace记录,然后点击Profile标签页的导入按钮   ,导入刚才保存的Inefficient的记录,两者对比如下:

      

    图 2-5  Energy Trace对比分析低功耗LPM3模式与持续Active模式
    在运行模式的对比中,当前的RuntimeEnergy大部分集中在LPM3中,而且FRAMMCLK都非常少,而Reference RuntimeReference Energy都在Active Mode里面,可以直观地对比出不同低功耗运行模式下所占用的时间比例。
    图 2-6  Energy Trace对比分析低功耗Power/EnergyStates
    上图则可以清楚地看到InefficeintReference EnergyReference Power(黄色曲线)比Most Efficient高出很多。并且可以看到Most Efficient的运行模式等状态在LPM3ActiveMode之间切换,降低了功耗。
    最后还有Build ConfigurationMost Efficient Solution的运行对比如下:
    图 2-7  Energy Trace对比分析PortB初始化的Power/EnergyStates
    采用对PortB初始化后,可进一步降低功耗。
  • 作者:sjtitr

    题目:用IAR建立自己的代码大厦

    俗话说——万丈高楼平地起,用腻了别人提供示例工程,所以今天我们就来从无到有地建立一个自己的工程,这不只是工程的问题,更要紧的是,搭建自己的软件平台,以便于之后,随时利用这平台迅速运行起各种机能

    整个工程的压缩包已经附在本文后面了,有需要的童鞋尽管拿去用,本代码允许被指摘、被学习、被利用甚至做成产品被出售,请保留相关注释信息就好。代码不是本文的核心内容,本文其实重在建立工程,建立自己的运行环境,代码只是一种辅助工具。

    IAR是个不错滴工具,我使用的版本是IAR EW for MSP430 5.60.7,关于安装的事情,本文不再讨论了,很简单,根据安装程序上的说明操作即可。

    不废话,打开IAR,我们就来建立新工程。
    如下图,IAR一打开就是这样了。
      

    接下来,当然要来创建一个新工程,如下图:
      

    弹出来对话框,我的习惯是使用纯C来开发单片机程序,你呢?
      

    找个地方保存工程吧……我把自己的这个平台称为sjtitr_platform,所以我的工程就起名为spf啦,之后全部保存还会提醒保存为工作空间,那么也在相同的地方保存即可。
      

    为了保证代码的整洁,在工程中,新建一个代码组,用来存放sjtitr_platform的有关代码
      

    给新的代码组起名,我就简单起名叫做splatform啦
      

    如果是新建文件,就要从菜单中选择,建立一个新的文件,注意的是,这个文件是一个空白的文件,我们在编辑好其中内容之后,需要保存为C文件。
      

    相关的C文件保存好了之后,要将其添加到工程中——在代码组上右击选择add,如果是当前这个文件,可以直接选择,如果有其他文件或者更多文件,可以选择"Add Files...",从弹出的对话框中选择要添加的文件。
      
    只多讲一个事情:这里一般不选择H文件,头文件进入工程采用的是包含引入的方式,接下来看看有关的操作。


    在工程上右击选择“Options”,可以弹出工程选项对话框
      

    在C/C++的相关选项中,有预处理一项内容,向其中添加你增加的头文件路径,将来我们写#include “.....”的时候,就会默认优先从这些路径里查找头文件啦。
    如果这里设置不正确,可能就会在编译时提示你找不到头文件。
      

    只要上面这些内容合理设置,再把源文件都写好,那么我们的工程就可以顺利编译了。
      
    看上图第一个“编译”和第二个“制作”的区别主要在于:编译只针对当前文件进行,所以头文件是不能编译的,这个按钮会灰掉;制作相当于全编译,把整个工程还未编译的文件都编译了,并且产生目标文件,可以用于下载到板子上运行。

    说到下载,还有些设置要进行。在这之前我们来实现基本的代码。我的示例程序做了一个blink,LED以大约2秒的周期闪烁,利用按键来切换闪烁模式:红灯闪、绿灯闪、双闪。

    为了支持基本的机能,我的平台需要有基本的事件的处理,所以利用事件来调度处理过程——

    1.   while(1)
    2.   {
    3.     if(spf_get_call(&call))
    4.     {
    5.       if(proc_array[call.pid] != NULL)
    6.       {
    7.         proc_array[call.pid](call.arg);
    8.       }
    9.     }
    10.   }
    复制代码



    再加上有时间的问题,所以我们暂且利用看门狗作为系统tick计时器(正经场合还是用看门狗复位比较安全,俺在此抛砖引玉了),每隔8ms产生一次tick

    1. void timer_init(void)
    2. {
    3.   IE1 |= WDTIE;
    4.   WDTCTL = WDT_MDLY_8;
    5. }



    把这个tick作为基准,用于其他处理需要的时间——LED闪烁需要定时,Key检测需要定时——把定时机制作为一个PROC,登记在splatform中。

    1. u8_t spf_timer_proc(arg_t arg)
    2. {
    3.   switch(arg)
    4.   {
    5.     case PROC_INIT:
    6.       {
    7.         u8_t  i;
    8.         for(i = 0; i < PROC_MAX_COUNT; i++)
    9.         {
    10.           timer_array[i].handler = NULL;
    11.         }
    12.       }
    13.       timer_init();
    14.       break;
    15.     case TIMER_TICK:
    16.       {
    17.         u8_t  i;
    18.         for(i = 0; i < PROC_MAX_COUNT; i++)
    19.         {
    20.           if(timer_array[i].handler)
    21.           {
    22.             if(timer_array[i].timeout)
    23.             {
    24.               timer_array[i].timeout--;
    25.             }
    26.             else
    27.             {
    28.               timeout_handler handler = timer_array[i].handler;
    29.               if(timer_array[i].interval)
    30.               {
    31.                 timer_array[i].timeout = timer_array[i].interval;
    32.               }
    33.               else
    34.               {
    35.                 timer_array[i].handler = NULL;
    36.               }
    37.               handler();
    38.             }
    39.           }
    40.         }
    41.       }
    42.       break;
    43.     default:
    44.       break;
    45.   }
    46.   return TRUE;
    47. }
    复制代码


    以上就是所谓软件平台大致的思路了,详细内容请参考示例的代码。
    最后利用平台来实现预定的机能:

    1. /*******************************************************************************
    2. * 段  落: Led控制处理
    3. * 描  述: 主要管理Led的blink模式
    4. *******************************************************************************/
    5. #define LED_ARG_SWITCH   0x02
    6. static u8_t led_arg = 0x01;
    7. void led_timeout(void)
    8. {
    9.   P1OUT ^= led_arg;
    10. }
    11. u8_t led_proc(arg_t arg)
    12. {
    13.   switch(arg)
    14.   {
    15.     case PROC_INIT:
    16.       {
    17.         P1DIR |= 0x41;    
    18.         P1OUT &= ~0x41;
    19.         set_timer(PROC_LED, 125, led_timeout, CYCLE);
    20.       }
    21.       break;
    22.     case LED_ARG_SWITCH:
    23.       {
    24.         P1OUT &= ~0x41;
    25.         switch(led_arg)
    26.         {
    27.           case 0x01:
    28.             led_arg = 0x40;
    29.             break;
    30.           case 0x40:
    31.             led_arg = 0x41;
    32.             break;
    33.           case 0x41:
    34.           default:
    35.             led_arg = 0x01;
    36.             break;
    37.         }
    38.       }
    39.       break;
    40.     default:
    41.       break;
    42.   }
    43.   
    44.   return TRUE;
    45. }
    46. /*******************************************************************************
    47. * 段  落: Key扫描
    48. * 描  述: 主要进行按键扫描检测
    49. *******************************************************************************/
    50. void key_scan(void)
    51. {
    52.   static u8_t keyRecord = 0x0A;
    53.   
    54.   keyRecord = (keyRecord << 1) | ((P1IN & 0x08) ? 1 : 0);
    55.   
    56.   if((keyRecord & 0x0F) == 0x0C)
    57.   {
    58.     spf_call_proc(PROC_LED, LED_ARG_SWITCH);
    59.   }
    60. }
    61. u8_t key_proc(arg_t arg)
    62. {
    63.   if(arg == PROC_INIT)
    64.   {
    65.     P1DIR &= ~0x08;
    66.     P1REN |= 0x08;
    67.     P1OUT |= 0x08;
    68.     set_timer(PROC_KEY, 3, key_scan, CYCLE);
    69.   }
    70.   
    71.   return TRUE;
    72. }



    编译成功以后,我们进行板子相关设置——首先根据前文的说法打开工程选项:第一个把通用设置中的芯片型号选择正确!
      

    接下来在调试选项中,选择FET调试器
      

    当然了,在FET具体设置里,也要选择正确是哪一个调试器——USB型的,你也是吧?
      
    原则上只要红框位置选择正确了,其他的也都是正确的,如果不放心,就逐个对照一下看看。

    最后下图,右面第二个是下载并进入调试模式,右面第一个是不下载只进入调试模式。所以下载调试,运行吧!

    右面第三个红色圆圆的按钮是什么?设置断点,有了今天的工程做基础,断点这部分,我们下次详聊。

    OK,关于小灯闪烁我就不上图片视频了,有兴趣的童鞋自己烧写运行试试。

  • 作者:sjtitr

    题目:IAR的调试功能 

    我们可以自己建立自己的工程了,但这一步只是开发中的第一小步。今天就来说说开发中举足轻重的另外一件事:调试。

    其实调试本身也并不难,楼主总结,调试关键在于两件事,一是运行,二是观察,为了更好的实现这两者,就牵涉到如何设置断点。

    运行很简单了,仔细观察调试工具栏:
      
    从左向右依次是:复位,暂停,步过,步入,步出,下一句,至光标,运行,退出调试模式。

    运行是以指令指针为参照的,在环境中表现为绿色的小箭头:
      
    指令指针指向的该行,表示的是接下来准备要执行的代码行。

    复位:指令指针回到开头,
    暂停:使正在奔跑的程序立定
    步过:执行当前这句话,如果这句话是函数调用,就把整个函数执行完,停在下一句
    步入:执行当前这句话,如果这句话是函数调用,就进入到函数里,停在函数的第一句话
    步出:一直执行到从当前的函数返回,停在函数返回后的下一句话
    下一句:执行C语言的一条语句,停在下一句代码上
    至光标:一直运行到光标所在行,并停在这一行上
    运行:运行到遇到断点
    退出调试模式:……额,就是退出调试模式


    观察,就是看——看什么?什么都看!

    在菜单View中,我们可以了解都有哪些可以看,重点都在中间那一段中。
      

    我们主要来看看重点中的重点,楼主比较常用的有以下这些:
    Breakpoints:也就是断点
    Disassembly:反汇编,也就是你写的程序经过编译烧写之后,在单片机中的样子
    Memory:内存,可以查看全部内存中的数据,看起来就像一般的16进制编辑器
    Symbolic Memory:符号内存,不但能看到内存数据,还能看出来对应程序中的什么变量
    Register:寄存器,查看全部寄存器的内容
    Watch:观察,可以根据你的需要,指定查看什么,根据楼主的经验,查看全局变量方便一些,在变量可见范围内,也可以查看局部变量和静态变量(static)
    Locals:查看函数局部(变量等)内容,包括函数的参数
    Statics:查看静态内存变量,注意不是指静态变量(static),而是生命周期是整个程序生命期的变量,原则上不在堆栈中的局部变量,应该都是静态内存变量。
    auto:自动,指的不是C语言中的自动变量,而是指根据指令指针当前的位置,自动显示出相关的变量
    Call Stack:调用栈,表示到当前位置的函数调用顺序图
    Stack:栈,就是栈的数据表示

    除了上述这些,还有一些可以看的东西,由于楼主不常用,因此楼主也不是百分百的清楚它们的意义和用法,就不在这里胡说八道了。
    总体来说即使只弄明白上述这些,在调试的时候也足够了,绝对能让你想看哪里,就看哪里。

    最后是断点,这个东西,可简单可复杂。所以下面我们简单来说说,便于大家好接受。

    基本的断点,通过下载调试按钮旁边的有着红色圆的按钮,就可以在光标当前行进行设置或者取消了,
      
    当然你也可以直接点击代码左侧的灰色区域,使断点出现或者消失。
      
    这是一个普通的位置断点,在IAR中也被称为代码断点,也就是当运行到这里的时候停下来。下图是断点窗格里看到的代码断点
      

    设置好代码断点,让程序运行,程序就会在运行到断点的位置时自动暂停下来了。
    以前经常有童鞋来问楼主,打了断点为啥停不下来……很简单,压根没跑到你设置断点的地方呗!


    在我使用的环境中,除了代码断点,还支持条件断点和高级断点的设置。
      
    可能是由于楼主也不太会使用这个,只能设置到读写某个变量时暂停,我连单独的读或写操作都无法指定,如下图所示。
      

    在用其他环境调试的时候,楼主也经常利用条件断点来监视某个变量被修改成非法值的时机点,以此来跟踪调查程序运行混乱的问题。

    简单总结一小下,调试时我们在做程序的时候,话费最多时间的阶段,所以从学习IDE的使用开始上手,能有效提高我们调试的效率,把程序做得更大更好更稳定。

  • 作者:蓝雨夜

    题目:【MSP430 编译器使用经验】 + Energy Trace™

    【MSP430 编译器使用经验】 +  Energy Trace™在低功耗项目,评估MCU自身能量功耗为多少!那些资源占用了多少功耗!是个比较麻烦且比较有难度的检测手段
    TI的Energy Trace™是为MSP430能量检测的有效手段,我们通过它,看看我们采用的MCU运行时的功耗情况!

    我们看看怎么使用Energy Trace™这个工具!

    实验CCS Version: 6.0.0.00190  MSP430FR5969

    1、CCS进入DEBUG模式

      

    2、调试模式
      


    3、打开“EnregyTrace”窗口:View/ other / MSP430-EnergyTrace   OK打开
      

    4、打开后出现的窗口
      


    5、在CCS中使能EnregyTrace功能
    这里可以通过2个途径启用
    a、CCS菜单 Window /  Preferences / Code Composer Studio /Advanced Tools /EnergyTrace Technology/Enable Ok即可
      

    b、还有就是在“EnregyTrace”窗口直接进入这个“属性窗口”
      

    6、设置“跟踪时间”
      

    7、F8 全速运行程序
      

    这里我们可以看到我们在一秒内使用了多少能量mJ,功耗mW,电流等等
      


    因为程序是闪琐一个LED所以功耗波形是这样
      while(1)
      {
        P4OUT ^= BIT6;                // Toggle LED
        __delay_cycles(100000);
      }

      


    非常直观

    同时我们可以增加跟踪时间至最大5分钟!


    还有我们调试其他MSP430时,要注意那些功能是可以跟踪的!
    只有59/69是支持EnergyTrace+ +™的

  • 作者:蓝雨夜

    题目: 【MSP430 编译器使用经验】 + 更好的解读代码方法

    CCS中有些功能使我们不用借助其他编辑工具!就能更快速的解读,编辑代码!
    非常实用的!

    1、在代码中,用鼠标放到“宏”,“全局变量”等待,CCS会自动弹出可以查看他们原形的提示!
    比如:图片中的宏定义。
      


    2、同样的功能,在代码中,用鼠标放到“函数”等待,CCS会自动弹出可以查看他们原形的提示!
    比如:图片中的函数原形。
      


    3、一个全局变量在当前c文件中,在什么地方被使用了,到底是被其他赋值,还是赋值给别的变量!
    鼠标点击变量,这是文件右边出现好多 小框框,不过要注意它们的颜色哦!
    颜色不同,就说明该变量用处不同!同时也了解这个变量大概被使用了多少次!
      


    4、同样的原理,鼠标点击函数,那文件右边就同样看到很多框框,就知道该函数的使用情况了!

  • 作者:lyzhangxiang

    题目:【MSP430 编译器使用经验】+将中断向量表置于RAM中 

    相信用过cm3的朋友们有深刻的体会,可以设置中断向量表到RAM或者FLASH中去,搞搞IAP很方便啊。之前在msp430有个项目要485升级,研究了一下。没搞定,后面还是用传统的方法实现的,就是那些br啊,中断向量重置这种。

    这里和大家分享一下如何把中断向量表放置在RAM中,我想应该是可以实现IAP的,可能是我的方式不正确,有兴趣的可以继续研究下。


    直接贴出代码吧,主要是思路,看一下代码吧,注意那个寄存器 SYSCTL |= SYSRIVECT;

    1. #include "msp430f5438A.h"
    2. #ifndef __MSP430F5438A__
    3.     #error "This example code only works for MSP430F5438A"
    4. #endif
    5. /* RAM结束地址 */
    6. #define TOP_OF_RAM                      (0x5BFF)
    7. /* RAM中中断向量表起始地址 */
    8. #define INT_VECT_START_ADDR             (TOP_OF_RAM + 1 - sizeof(int_vect_t))
    9. /* TA1_CCR0_ISR */
    10. __interrupt void TIMER1_A0_ISR(void);
    11. /* 中断函数指针变量类型定义 */
    12. #if 0
    13.     typedef void (*isr_type_t)(void);
    14. #else
    15.     typedef unsigned int  isr_type_t;
    16. #endif
    17.     
    18. /* 中断向量表数据类型 */
    19. typedef struct 
    20. {
    21.     isr_type_t reserved[41];
    22.     isr_type_t rtc_a;
    23.     isr_type_t io_p2;
    24.     isr_type_t usci_b3_rx_tx;
    25.     isr_type_t usci_a3_rx_tx;
    26.     isr_type_t usci_b1_rx_tx;
    27.     isr_type_t usci_a1_rx_tx;
    28.     isr_type_t io_p1;
    29.     isr_type_t ta1_ta1iv;
    30.     isr_type_t ta1_ccr0;
    31.     isr_type_t dma;
    32.     isr_type_t usci_b2_rx_tx;
    33.     isr_type_t usci_a2_rx_tx;
    34.     isr_type_t ta0_ta0iv;
    35.     isr_type_t ta0_ccr0;
    36.     isr_type_t adc12_a;
    37.     isr_type_t usci_b0_rx_tx;
    38.     isr_type_t usci_a0_rx_tx;
    39.     isr_type_t wdt;
    40.     isr_type_t tb_tbiv;
    41.     isr_type_t tb_ccr0;
    42.     isr_type_t unmi;
    43.     isr_type_t snmi;
    44.     isr_type_t reset;
    45. }int_vect_t;
    46. /* 指向RAM中向量表的起始地址 */
    47. int_vect_t * const ram_int_vect_p = (int_vect_t*) INT_VECT_START_ADDR;
    48. void main(void)
    49. {
    50.     P1DIR |= BIT0;
    51.     
    52.     /* 50ms中断 */
    53.     TA1CCTL0    = CCIE;
    54.     TA1CCR0     = 50000;
    55.     TA1CTL      = TASSEL__SMCLK + MC__UP + TACLR;
    56.     
    57.     /* 拷贝中断向量表中的ISR地址 */
    58.     ram_int_vect_p->ta1_ccr0 = (isr_type_t) &TIMER1_A0_ISR;
    59.     
    60.     /* 
    61.      * 将中断向量表移动到RAM中
    62.      * 注意只有部分系列芯片才会有这个寄存器
    63.      */
    64.     SYSCTL |= SYSRIVECT;
    65.     
    66.     /* 使能中断进入LPM0模式 */
    67.     __bis_SR_register(LPM0_bits + GIE);
    68.     
    69.     __no_operation();                         
    70. }
    71. #pragma segment="ISR_CODE"
    72. __interrupt void TIMER1_A0_ISR(void)
    73. {
    74.     /* 闪灯操作 */
    75.     P1OUT ^= BIT0;
    76. }
    77. int __low_level_init(void)
    78. {
    79.     /* 关闭看门狗 */
    80.     WDTCTL = WDTPW + WDTHOLD;
    81.     
    82.     /* 初始化变量 */
    83.     return 1;
    84. }


    最后一点点相关的东西:

    1. /*
    2. ISR_CODE在XCL文件中的描述
    3. 片段一:
    4.     // segment         Usage
    5.     // -------         ---------------------------------------------
    6.     // INFO            Information memory
    7.     // INFOA           Information memory, bank A
    8.     // INFOB           Information memory, bank B
    9.     // INFOC           Information memory, bank C
    10.     // INFOD           Information memory, bank D
    11.     // CSTART          Program startup code
    12.     // CODE            Program code
    13.     // ISR_CODE        Program code for interrupt service routines
    14.     // DIFUNCT         Dynamic initialization vector used by C++
    15.     // CHECKSUM        Checksum byte(s) generated by the -J option
    16.     // INTVEC          Interrupt vectors
    17.     // RESET           The reset vector
    18.     // TLS16_ID        Thread-local initializers for main thread
    19.     //                 (require custom runtime library)
    20.     //
    21.     // Notes:
    22.     //
    23.     // * The segments CSTART, ISR_CODE, and DIFUNCT, as well as the segments in
    24.     //   the DATA16 and TLS16 segment groups must be placed in in the range
    25.     //   0000-FFFD.
    26.     //
    27.     // * The INFOx and INFO segments overlap, this allows data either to be
    28.     //   placed in a specific bank or anywhere in the info memory.
    29.     //
    30.     // * The INTVEC and RESET segments overlap. This allows an application to
    31.     //   either use the reset vector provided by the runtime library, or
    32.     //   provide a reset function by defining an interrupt function associated
    33.     //   with the reset vector.
    34. 片段二:
    35.     // ---------------------------
    36.     // Code
    37.     //
    38.     -Z(CODE)CSTART,ISR_CODE=5C00-FF7F
    39. XBOOT说明:
    40.     v2.10 --- 中断向量表放置到RAM中
    41.     1)为了简化BOOT的操作流程,将BOOT的中断向量表放置在RAM中,APP程序中断向量表采用通用的方式
    42.     2)具体划分如下:
    43.         --------|---------------|------>0x5C00
    44.              5K |      BOOT     |
    45.         --------|---------------|------>0x6FFF
    46.         --------|---------------|------>0x7000
    47.                 |               |
    48.                 |      APP      |
    49.                 |               |
    50.         --------|---------------|------>0xFF7F
    51.         --------|---------------|------>0xFF80
    52.                 |   APP_VECTOR  |
    53.         --------|---------------|------>0xFFFF
    54.         
    55.         
    56.         
    57.         --------|---------------|------>0x1C00
    58.                 |               |
    59.                 |      RAM      |
    60.                 |               |
    61.         --------|---------------|------>0x5B7F
    62.         --------|---------------|------>0x5B80
    63.                 |    BT_VECTOR  |
    64.         --------|---------------|------>0x5BFF
    65.     3)注意XCL文件中修改RAM区域为0x1C00-0x5B7F,注意应用程序和BOOT程序的复位地址问题
    66.     4)目前只能实现BOOT程序将中断向量表放置在RAM中,还不能实现APP程序通过升级执行
    67. */

  • 作者:lyzhangxiang

    题目:【MSP430 编译器使用经验】+函数定义变量定位

    1、同样采用的是IAR,目标芯片型号MSP430F5438
    2、需要事先了解IAR的linker文件结构,不作描述,请自行参考文档《IAR C/C++ Compiler Reference Guide for Texas Instruments’MSP430 Microcontroller Family.pdf》和《IDE Project Management and Building Guide.pdf》直接点击IDE中的help栏选择即可。

    3、变量定位很简单格式如下:
    __no_init unsigned char XXX[50]@0x5000;

    4、函数定位方法很多,这里给出常用的一种:
    1)修改xcl文件中添加-P(CODE)MyFuncSeg=25B00-26000
    2)函数声明:void Function(void)@"MyFuncSeg";函数形式不定,可以有参数也可以无参数

    5、编译即可,无其他特别说明。

    STEP1:
      


    STEP2:
      


    注意变量定位需要使用__no_init,不可省略,且未被初始化的变量记得在程序开始,自行初始化一下,未初始化的数据是随机的。

    我这里使用一个排序的函数测试,定位的地址正确,可以通过仿真看出。

    都是基础知识的分享,后面会分享一个高级的应用,如何实现中断向量表重定位,可以Boot程序和App程序分别使用中断相互不影响。

  • 作者:lyzhangxiang

    题目:【MSP430 编译器使用经验】+将程序拷贝到RAM中执行

    1、首先使用IDE为IAR,当然这个说是编译器不太合适,针对IDE而言会合理些吧,暂且这么叫吧。
    2、请先自行了解__low_level_init()函数,默认使用该文件的路径是X:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\low_level_init.c 。
    3、针对我们的应用,先拷贝出一份low_level_init.c放置到工程目录下面。
    4、接下来我们添加一个汇编文件命名为Flash2RAM.asm或者.r43也可以的吧,我使用.asm后缀。
    5、汇编代码如下:
    PUBLIC FLASH_2_RAM

    RSEG        CODE  

    FLASH_2_RAM
    PUSH.W      R8
    PUSH.W      R9
    PUSH.W      R10
    MOV         #20H,R10
    MOV         #5C16H,R8
    MOV         #3C00H,R9
    LOOP MOV    @R8+,0(R9)
    INCD        R9
    DEC         R10
    JNZ         LOOP
    POP.W       R10  
    POP.W       R9
    POP.W       R8
    RET

    END
    6、修改low_level_init.c文件如下:


    extern void FLASH_2_RAM(void);

    int __low_level_init(void)
    {
        WDTCTL = WDTPW | WDTHOLD;
        FLASH_2_RAM();
        asm("mov #3C00h,R0");
        return 1;
    }

    此处在cStart之前把Flash中的程序拷贝到RAM中,注意针对的MCU型号为MSP430F5438,其他的型号修改相关的FLASH和RAM首地址即可。
    注意这里在拷贝结束后把指针强制指向RAM中即可。

    7、实测程序,非转载欢迎大家测试。

    8、针对一款MCU而言,如果你选择某款IDE作为开发环境,建议要搞清楚一些基本的知识点,启动过程,cstart过程都做了哪些事情,linker的细节问题。如果你用开源的编译器来建立一个工程的话,相信你会了解其中的种种,MSP430有开源的gcc编译器哦,大家可以玩玩。

  • 作者:海盗郭兆广

    题目:【MSP430 编译器使用经验】IAR的初识

    第一次与MSP430单片机相识是在上大学的时候,当时为了做一个项目是空气净化器的用到

    430,之后便与430 结下了不解之缘

    下面写的仅仅代表我自己的一些东西,拿出来跟大家分享说的不对的地方还请大家指正。


    我使用的是IAR,所以也就从IAR说起吧。

    IAR是一种领先的嵌入式系统开发工具。IAR软件提供了工程管理,程序编辑,代码下载,调试等所有功能。我使用的IAR版本为V4.1.1版,其实各个版本之间差异不大。
    ···············软件安装················
    IAR软件的安装及破解【仅供参考,正版还是需要购买的。如果侵犯了您的权益告知我我立刻删除】
    (1)软件的下载及破解     IAR EW430在百度上很容易找到下载连接,也可以在IAR官网上下载,再下载注册机。准备工作已经就绪:(2)软件的安装1.运行ew430-ev-cd-411b.exe
    2. 点击Next
      

    这样一直点下去,确认、接受之类的就不用说了。中间会让你输入序列号这时候就要破解了:运行注册机(iarkg.exe)
      
    首先在product中选你使用的版本号,然后点击Generate生成License number和License Key将License number输到Licinse#中
      
    之后一路NEXT默认即可。OK!大功告成!第一步安装完成。
    ···············设置和调试 ···············
    打开软件后会出现一个向导
      
    选第一个就可以在现在的workspace建立一个new project,再点OK就行了如果不用向导,可以按一下步骤:(1) 选择主菜单的File >New>Workspace,然后开启一个空白工作区窗口  
    (2) 选择主菜单Project>Create New Project弹出生成新项目窗口中我们选择Empty project。
      
    点击OK选择保存路径后,点击保存。到此处新工程建立完毕下面需要加入文件   
      
    写好代码后,选择主菜单的File >Save命令保存为C文件右击工程名,将写好的程序添加进去Add>Add Files
      
    选中刚才保存的c文件对于刚存好的程序,例如例子中的main.c,也可以用Add>Add“main.c”添加入工程。  如果工程很大,需要添加的文件很多。可以用Add>Add Group,【加入新的组,将加入的文件分组管理。】
    ·················软件···················
    将工程建好后,往往需要先进行设置,才能正常的使用。下面写的是一些常用。 右击工程名,点击Option会出现:
      

    首先是在General Option中修改Device
      
    这要根据你所用的芯片选取,比如MSP430F149然后在Debugger中修改Driver有两个选项:   
    Simulator:软件仿真FET Debugger:Jtag调试在FET Debugger中修改Connection:   
    第1项是TI的USB-Jtag  可以用U口调试第2项是普通的Jtag,要用到计算机的并口调试第3项是J-link,在新版本的IAR EW430中没有这一项后面的不常用。基本的设置结束
    ················· 程序的调试·················
    添加好文件后,应该在工程下可以看到你的main.c等文件选择Compile按钮,对main.c进行编译第一次编译是要保存Workspace Files ,根据自身情况改好文件名和路径后保存。底下会出现Build信息窗口如果是Done. 0 error(s), 0 warning(s)
      
    就可以点击make,如果在信息窗口显示没有错误,就可以点击调试(Debug)进行调试,若已经用下载器和开发板相连,此时程序就能烧入芯片进入调试界面   
    这几个按钮的说明是:
      
    到这就是基本的调试······················


  • 作者:海盗郭兆广

    题目:【MSP430 编译器使用经验】空气净化器的控制程序编写

    在大学那会做的空气净化器
    主要功能比较简单功能:自动、手动。
    主要通过PWM控制电机转速。
    下面是一些程序,仅供参考。
    #include <msp430x14x.h>
    #define keyin    (P2IN & 0x07)

    unsigned int count;
    void delay();
    void BELL();
    void PWM_B(int x);
    void keyscan(void)
        {
          unsigned char temp=0;


            if(keyin != 0x07)       //如果有键被按下
            {
               temp=keyin; 
              delay();            //延时消抖
                if(keyin != 0x07)   //再次检测按键状态
                {
                    while(keyin!= 0x07); //等待按键被放开后开始执行以下指
                    if(temp==0x06)//静音模式
                    {
                      flag=0;
                      BELL();//蜂鸣器
                      P3OUT |=0xff;
                      P3OUT &=0xFE;
                      PWM_B(400);
                    }
                    if(temp==0x05)     //手动4级调速状态控制
                      {
                       flag=0;
                       count++;
                       BELL();//蜂鸣器
                       switch(count)    //转换键值    
                        {
                           case 1:
                              PWM_B(500);
                               P3OUT&=0xFE;//只将第一位致0,使第一个灯亮。
                               P3OUT|=BIT4+BIT1+BIT2+BIT3;
                               break;
                           case 2:
                                PWM_B(650);
                                P3OUT&=0xFC;
                                P3OUT|=BIT4+BIT2+BIT3;
                                break;
                           case 3:
                                PWM_B(800);
                                P3OUT&=0xF8;
                                P3OUT|=BIT4+BIT3;
                                break;
                           case 4:
                                PWM_B(1000);
                                P3OUT&=0xF0;
                                P3OUT|=BIT4;
                                break;

                           //default:               //表示其他情况的时候 自动模式
                                //PWM_B(350);break;
                        }
                     if(count==4)
                     {
                       count=0;
                     }
                    }
                    if(temp==0x03)//自动调速状态
                    {      
                      flag=1;
                      BELL();//蜂鸣器
                      P3OUT |=0xff;
                      P3OUT &=0xEF;     ///////YOUWENT            }

                   }
            }    

          }
        }

    #include <msp430x14x.h>
    void PWM_B(int x)
    {
      TBCCR0 = 1000-1;                           // PWM Period
      TBCCTL1 = OUTMOD_7;                       // CCR1 reset/set
      TBCCR1 = x;                             // CCR1 PWM duty cycle
      TBCTL = TBSSEL_1 + MC_1;                  // ACLK, up mode

    }

    /***************************************************
    时间:2012年07月25
    程序功能:修改算法,修改ADC通道,序列通道多次转换,修改pwm波。
    ----------------------------------------------------
    测试说明:按动自动,手动,静音三个键,分别观察转速
    ***************************************************/
    #include <msp430x14x.h>
    #define   Num_of_Results   32
    #define keyin    (P2IN & 0x07)
    float Curr_Volt,Curr_Volt1;
    //static long int A0results[Num_of_Results];    //保存ADC转换结果的数组 
    //static long int A1results[Num_of_Results];    //保存ADC转换结果的数组 
    float data[2];
    unsigned int flag;
          unsigned int count=0;
    int i=0;
    #define uint unsigned int
    #define uchar unsigned char
    void Trans_val(unsigned int Hex_Val);
    void Trans_val1(unsigned int Hex_Val);
    void PWM_B(int x);
    void BELL();
    void keyscan(void);
    void delay(void);
    void automatic(void);
    void PWM_A(void)
    {
      CCR0 = 60000-1;                             // PWM Period最大ffff
      CCTL1 = OUTMOD_7;                         // PWM reset/set
      CCR1 = 1920;                               //  PWM duty cycle
      TACTL = TASSEL_2 + MC_1;                  // SMCLK, up mode
    }
    void ADC12_init()
    {
      P6SEL |= 0x0f;                            // Enable A/D channel A0
      ADC12CTL0 = ADC12ON+SHT0_2+MSC;              // Turn on ADC12, set sampling time
      ADC12CTL1 = SHP+CONSEQ_3;                          // Use sampling timer, set mode
      ADC12MCTL0 = INCH_0;
      ADC12MCTL1 = INCH_1;
      ADC12MCTL2 = INCH_2;
      ADC12MCTL3 = INCH_3;
      ADC12MCTL4 = INCH_4;
      ADC12MCTL5 = INCH_5 + EOS;
      ADC12IE = 0x08;                           // Enable ADC12IFG.0
      ADC12CTL0 |= ENC;                         // Enable conversions
    }
    void ADC12_START(void)
    {
         ADC12CTL0 |=ADC12SC;                            //开始转换
    }


    /********************主函数********************/
    void main( void )
    {   WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
         P1DIR |= 0x0C;                            // P1.2 and P1.3 output
         P1SEL |= 0x0C;                            // P1.2 and P1.3 TA1/2 otions
         P2DIR=0x00;
        P3DIR |=BIT5+BIT4+BIT3+BIT2+BIT1+BIT0;
        P3OUT |=BIT5+BIT4+BIT3+BIT2+BIT1+BIT0;
        P4DIR |= BIT1;                            // P4.1  output
        P4SEL |= BIT1;                            // P4.1  TBx options                               
        ADC12_init();
        ADC12_START();
        _EINT();                               //打开中断
        while(1)
        {  
           _BIS_SR(LPM0_bits + GIE);   
        }


    }
    /*******************************************
    函数名称:delay
    功    能:用于消抖的延时
    参    数:无
    返回值  :无
    ********************************************/
    extern void delay(void)
    {
        unsigned int tmp;

        for(tmp = 12000;tmp > 0;tmp--);
    }
    /************************************
    函数名称:automatic
    功    能:当按下自动挡后,机器可以自动识别气体质量
    参    数:【气体检测标准】    范围 150~330
             【灰尘检测标准】   范围  40~150
    返回值  :
    ************************************/
    void automatic(void)
    {
      if(flag==1)
      {
        PWM_A();
        if(Curr_Volt>=330||Curr_Volt1>=330)
           PWM_B(900);
          else if(Curr_Volt>=290||Curr_Volt1>=300)
             PWM_B(800);
    ··············

                    else
                    PWM_B(400);
      }
    }
    void BELL()
    {
      P3OUT&=0xDF;
      delay();
      P3OUT|=BIT5;
    }
    void keyscan(void)
        {
          unsigned char temp=0;



            if(keyin != 0x07)       //如果有键被按下
            {
               temp=keyin; 
              delay();            //延时消抖
                if(keyin != 0x07)   //再次检测按键状态
                {
                    while(keyin!= 0x07); //等待按键被放开后开始执行以下指
                    if(temp==0x06)//静音模式
                    {
                      flag=0;
                      BELL();//蜂鸣器
                      P3OUT |=0xff;
                      P3OUT &=0xFE;    
                      PWM_B(400);
                    }
                    if(temp==0x05)     //手动4级调速状态控制
                      {
                       flag=0;
                       count++; 
                       BELL();//蜂鸣器
                       switch(count)    //转换键值    
                        {
                           case 1:
                              PWM_B(500);
                               P3OUT&=0xFE;//只将第一位致0,使第一个灯亮。
                               P3OUT|=BIT4+BIT1+BIT2+BIT3;
                               break;
                           case 2:
                                PWM_B(650);
                                P3OUT&=0xFC;
                                P3OUT|=BIT4+BIT2+BIT3;
                                break;
                           case 3:
                                PWM_B(800);
                                P3OUT&=0xF8;
                                P3OUT|=BIT4+BIT3;
                                break;
                           case 4:
                                PWM_B(1000);
                                P3OUT&=0xF0;
                                P3OUT|=BIT4;
                                break;

                           //default:               //表示其他情况的时候 自动模式
                                //PWM_B(350);break;
                        }
                     if(count==4)
                     {
                       count=0;
                     }
                    }
                    if(temp==0x03)//自动调速状态
                    {      
                      flag=1;
                      BELL();//蜂鸣器
                      P3OUT |=0xff;
                      P3OUT &=0xEF;     ///////YOUWENT            }

                   }
            }    

          }
        }
    /*******************************************
    函数名称:ADC12ISR
    功    能:ADC中断服务函数,在这里用多次平均的
              计算P6.0口的模拟电压数值
    参    数:无       
    返回值  :无
    ********************************************/
    #pragma vector=ADC_VECTOR
    __interrupt void ADC12ISR (void)

      data[0]=ADC12MEM0;
      data[1]=ADC12MEM1;
      Curr_Volt=330*(data[0])/4095;
      Curr_Volt1=330*(data[1])/4095;
      keyscan();
    // PWM_A();//加到了自动挡,不自动不发送pwm波,减少中断程序。。
      automatic();
      _BIC_SR_IRQ(LPM0_bits);  
    }

  • 作者:海盗郭兆广

    题目:【MSP430 编译器使用经验】在启动代码中关闭看门狗

    MSP430的看门狗默认是打开的,如果在程序开始不关闭程序执行到一定时间msp430就会自动复位一次,那样程序就无法正常执行。一般在成为正式产品,要保证其可靠性的情况下再开看门狗,所以在我们编写程序时候不建议打开看门狗。WDTCTL = WDTPW + WDTHOLD我分享一下在启动代码关闭看门狗,我们也可以在启动代码中更改其他的程序。。
    第一步:找到cstartup.s43文件,在你的安装目录下C:\Program File\msp430\src\lib\430 中找到。
    第二步:打开cstartup.s43文件,打开之前先设置cstartup.s43文件的属性,去掉只读。
    看到文件内有如下语句:
    #ifdef DISABLE_WATCHDOG 
    MOV     #WDTPW + WDTHOLD, &WDTCTL
    #endif
    有关闭看门狗的条件编译语句
    我们在文件头添加一句:
    #define DISABLE_WATCHDOG
    然后保存。
    第三步:将cstartup.s43文件添加到我们的工程当中
    在Project-Options-Linker-Config页中选择Override default programe ,并将Entry symb 设置成 program_start。
    编译下载到单片机中时,把debugger->setup->Run to main销掉。
    ok!

  • 作者:an736007364

    题目:【MSP430 编译器使用经验】+CCS and IAR 

    这里重点说一下CCS吧,可谓是MSP430的原配!用MSP430,CCS有多重要,多方便,多灵活你懂的。 且容我慢慢证明:
    第一次接触CCS还是从launch Pad开始,以前都是用IAR for MSP430,第一次用IAR觉得真丑,有种瘦骨嶙峋的感觉,而且比较繁琐。然而第一次用CCS感觉很丰满,从代码编写到debug仿真,不得不说美不胜收!
    如图,打开时的界面
      
    是不是很有科技感!
    打开后的界面
       
    很清洁,很干净。这里如果要新建工程可单击Project来新建。也可以直接使用TI官方的一些例程,稍作修改即可完美运行,省了不少功夫。
    着重来张使用TI官方例程的图示
       
    此处方便的选择所用的MSP430芯片,我用的是launch Pad提供的G2553。
    器件选择之后你是不是该选择使用的外设了呢,来挑一挑吧。
       
    看到了吧,工程自动创建好了。是不是非常有爱!!!赞一个
    编写代码就不说了吧,OK。
    下面来介绍一下debug功能。
        
    先是编译一下,而后进入debug模式,再然后你就看到debug界面了,怎么样是不是划分的很清楚。
    接下来看看主要功能
      
    按钮,开始暂停单步等等,这基本上是编译器的标配。
    往右看,变量,表达式,寄存器齐了!
    跟我一起来瞧瞧寄存器吧
      
    哇,红了,是不是觉得奇怪,为什么读不到寄存器的值?答案是正在debug-ing,请稍候,不想稍后自觉点暂停按钮,不认识英文?暂停标识应该很清楚吧。
    好了,来看看暂停时debug是什么样子吧
      
    看到了吧,刚才没看到的值都是在变化的值,暂停了就清楚的呈现在你眼前了吧。感觉特好使深入理解MSP430。 再赞个!
    来瞧瞧怎么创建表达式的吧
        
    完成变量表达式的创建。OK。可以开始查看变量了。
    进入函数一步一步走
      
    看看变量是不是在变化了。OK。到此是不是感觉CCS很强大!果然是原配!





    下面来简单了解一下IAR吧,简单了解。。。
    新建工程就不说了,直接跳过
      
    主要谈谈设置
      
    右键单击Options设置器件以及仿真器and    debug
      
      
      
    和所有编译器一样debug是必不可少的,而且基本都是一样的。
      
    想看什么在view里面查找你想要找的寄存器等
      
    大家都可以尝试使用一下。

  • 作者:slotg

    题目:【MSP430 编译器使用经验】+ Energia 开发环境认识 

      

    【说明】

    Arduino是这几年最著名的开源平台之一,在淘宝上搜一下就可以搜到很多为这个开源平台设计的扩充模块,Arduino平台不一定适合直接拿来做为产品使用,但是利用这些众多的扩充模块却是可以用来学习或是评估新设计项目的一个方法。

    因为Arduino存在众多的使用者,因此有很多非AVR系统的板子也会提供类似的开发环境,而Energia就是针对TI多款LaunchPad使用的一个开发环境。

    Energia官网http://energia.nu/

    在这里可以查询到目前所支援的板子,也可以下载相关程序,目前最新的版本是0101E0012,这是一个免安装的版本,下载解压缩后执行资料夹底下的energia.exe 

    底下的执行画面,熟悉Arduino的人应该是不会感到陌生。

    开发环境内已经包括了许多展示程序:


    【实验一】

    开启一个LED闪烁的展示程序(Blink

    系统会开启一个新的窗口,旧的窗口可以关闭。

    先确认一下所连接的LaunchPad型号。

    LaunchPad接上PC后系统会产生一个串口号码,确认一下设定是否正确。

    按下工具列最左边的图示(Verify),程序开始编译,编译完成后底下讯息列显示Done compiling

    编译完成后,按下工具列左边第2个图示(Upload),将程序下载到LaunchPad上。

    下载过程,底下讯息列显示Uploading…

    下载完成后,底下讯息列显示Done uploading

    这时候就可以看到LaunchPad上的LED呈现闪烁的状态。


    【实验二】

    开启一个串口的展示程序(ASCIITable

    工具列的最右边有一个开启串口观察的图示(Serial Monitor

    打开后可以观察与调试串口传输状态

    编译并下载到LaunchPad上,下载的过程中会将观察窗口关闭,因此下载完成后需再打开观察窗口,并按下LaunchPad上的RESET键,这时候可以在观察窗口上看到LaunchPad透过串口所送出的ASCII表格。

    Energia是一个有趣的开发环境,可以让熟悉Arduino的人快速使用TILaunchPad,目前Energia所支援的LaunchPad除了MSP430之外也包括了Stellaris与Tiva C,因此假如想快速掌握这些LaunchPad的强大功能,Energia是一个不错的选择。


  • 作者:slotg

    题目:【MSP430 编译器使用经验】+ Energia 探索1

    本文是针对上一楼,举例的实验Blink程序做一个探索:

    Blink程序如下:


    程序里面定义了LEDRED_LED,而RED_LED是在那里定义的呢?


    这里说明了接脚的定义是在 pins_energia.h 里面,而这个档案在那里呢?这个档案是在:


    Energia/hardware/msp430/variants/launchpad/pins_energia.h


    打开档案看看相关的定义:


    可以看到RED_LED是定义在P1_0,而GREEN_LED是在P1_6。然而打开LaunchPad的原理图,原理图上P1_0所连接的LED1标示是greenP1_6所连接的LED2标示是red


    这是Energia对于MSP430G2553 LaunchPad的接脚定义:


    为了确认P1_6所接的LED是什么颜色的,修改程序里面LED的定义:


    这是 #define LED RED_LED 的执行结果:


    这是 #define LED GREEN_LED 的执行结果:

    执行结果确认了P1_6所接的LED2是绿色的,也就是原理图上的标示是错误的。


    原展示程序是红色的LED1闪烁,最后我们做个小修改,让红色的LED1与绿色的LED2交互闪烁:

  • 作者:slotg

    题目:【MSP430 编译器使用经验】+ Energia 探索2 

    本文针对MSP430G2553 LaunchPadSPI传输方式做一个实验。


    MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的BBCD编码器、多路扫瞄回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。


    MAX7219使用SPI方式与MCU连接,网上可以找到这样的一个模块:


    MAX7219点阵模块共有5根脚,除了电源的2根脚外,另外3根脚是与MCU连接的SPI信号。


    网上找了一个在Arduino板子执行的程序,执行结果如下:


    Energia是一个与Arduino相似的开发环境,然而Arduino程序是否可以直接在Energia底下编译?是否可以直接在MSP430G2553LaunchPad执行呢?


    这是Energia对于MSP430G2553 LaunchPad的接脚定义:

    其中跟SPI相关的4根接脚:




    MAX7219点阵模块与MSP430G2553LaunchPad的接线如下:

    DINMOSIP1.7
    CSCSP2.0
    CLKSCKP1.5


    Energia环境下载入程式后,编译,没有出现错误讯息:


    下载到板子上:


    程序没有如预期般的执行!

    看了别的演示程序,发现SPI所使用的SS脚是需要宣告为输出,因此加入这一行:
    重新编译后再下载到板子上,程序可以正常执行了:


  • 作者:haixinghp

    题目:【MSP430 编译器使用经验】+代码快速输入

    发帖新手,之前没有发过技术类的帖子,写的不好,希望大家见谅……言归正传,相信用过VS2010的同学都很喜欢它的代码提示功能。可是IAR for MSP430现在还没有,对于整天要写代码的“码农”来说,重复输入相同的代码很是浪费时间。我也是摸索了很久才知道IAR有下面的一些技巧:
    菜单中Edit --》 code templates --> edit templates  打开是这个样子:   
    拿for语句来说可以加入下面的代码来实现:
    #TEMPLATE &Statement>&for,"&End Value"=10,&Variable=i
    for(int %2 = 0; %2 < %1; %2++)
    {
      %c
    }

    #TEMPLATE 代表代码模版
    &Statement 是模块的名字清单,可以自己来取
    "&End Value"=10 这个代表for 结束的值
    &Variable=i    循环变量
    %1,%2,代表相应位置输入值
    使用Edit --》 code templates --> insert templates
    在出现在菜单中选择Statement--> for 之后会出现这个菜单

      

    比如我输入10,i,就会生成代码如下
      

    我自己整理的代码模版: 

    接下来分享一些技巧的操作:

    1、更改注释字体的方式:在代码段点击右键,找到Options->Editor->Color and Fonts ,然后找到Syntax Coloring,再找到C++ comment和comment,然后将左侧的type Styles 改成 Normal 就可以了,还可以把注释的颜色改成绿色,这样更加适合我们的习惯。其次在这里还可以更改C或C++里面关键字的颜色。

    2、显示行号:在代码段点击右键,找到Options->Editor,将右面的Show Line Numbers 勾选上就可以了。

    3、设置Tab键:在代码段点击右键,找到Options->Editor,将上面的Tab Size设置为4,Index Size 也设置为4这样就可以实现直接按Tab键就可以缩写4个空格。

    4、注释的快捷键:Ctrl+K;取消注释:Ctrl+Shfit+K

    5、CTRL + B自动的把程序{}花括号的配对内容反色的选中

    6、格式化源码  CTRL + T

    7、Ctrl+Shfit+空格,可以使用IAR提供的内部代码的编写,如if语句。

    一些快捷键:

    *Ctrl+Shift+V    列出剪切板中所有的字符串供选择粘贴
      Ctrl+B           智能选择光标所在括弧内的区域,多次使用可选更大的区域
      Ctrl+T           对选择区域进行自动缩进
      Ctrl+K           注释掉选择区域
      Ctrl+Shift+K          去除所选区域的注释,所选区域必须是全被注释掉的.
      F9                   光标处添加/删除断点
      Ctrl+F9           使能/失能断点
    *Shift+Alt+E     打开断点窗口,列出所有断点
    *Ctrl+F           向下寻找光标所在处的单词
      F3                  向下寻找上次搜索的字符
      Shift+F3           向上寻找上次搜索的单词
      Ctrl + H          替换字符串
      Ctrl + G           跳到指定行
      Ctrl+Shift+F           在文件中搜索
    *Shift + F2           在光标处添加标签
      F2                   跳到下一个标签处
      F4                   跳到定义处
    *Ctrl+F4           关闭当前文件
    *Ctrl+1          新增垂直窗口
    CTRL+SHIFT+SPACE      模版使用(包括if、for、class等);
    CTRL+B                括号匹配 选择括号内的多行代码;
    CTRL+T                自动缩进,格式化选中代码,格式设置在
    TOOLS->OPTIONS->EDITER->Auto Indent->CONFIGS;
    CTRL+K                快注释,屏蔽选中的代码;
    CTRL+SHIFT+K          取消快注释,取消屏蔽选中的代码;
    *Ctrl+2            新增水平窗口
    *Ctrl+Shift+4    关闭除当前激活外的所有文件 
    Ctrl+Shift+空格 插入Template

  • 作者:IC爬虫

    题目:【MSP430 编译器使用经验】 + 添加自己写的头文件的方法

        初学IAR for 430的时候使用别人的代码,经常编译的时候出现无法找到头文件的编译提示错误。我但是就是属于这样的小白,有不知道怎么添加这些文件,应为以前我学51的时候往往都是把很多代码都写在同一个.C文件中,顶多就只添加一个REG52.h的头文件,别人写的代码往往是包含了很多自己写的头文件的,于是在网上搜到了添加头文件的方法,现在做一个总结。    如果你是把头文件和当前工程的目录保存在一起的,这个很简单,是需要在你的主程序中包含这个头文件就可以,不需要在编译器下手动添加,编译这个工程后相应的头文件自然会出现在相应的.c文件下,这也就说明这个头文件被调用了。。
        另外一种情况是你的程序的组织结构比较复杂,需要使用到的文件较多,为了使我们的工程看起来比较整洁,一般都会把不同的功能的代码用文件夹方便装起来,这种情况下右击workspace中的Debug项,add --> add group ,如图所示。自己可新增如名为Resource和Head的文件夹,将.c和.h文件作一个分类。如果.h和.c文件不在编译器默认搜索路径下,则需要在如图2所示的C/C++ compiler 选项中添加额外的include 搜索路径,每行写一个新的路径。。

      



      

  • 作者:chende815

    题目:【MSP430 编译器使用经验】+ 关于在Information Flash中初始化数据

    在一些项目需要保存一些参数和数据在EEPROM或者FLASH中,由于MSP430单片机没有内置EEPROM,只能把数据存储在FLASH中。查找IAR编译器的用户手册得知,可以使用location和__root关键字定义数据在flash中,只要编程下载时写入就可以了。而在CCS中,我还没有找到方法,希望知道的朋友不吝赐教。

    #pragma location = 0x1000

    __root const unsigned char pic[]=
    {
        0x00,0x00,0x00,0x02,0x11,'0','2','0',//00-07
        '0','0','0','0','0','0','0','0',    //08-0F
        '0','6','8','1','0',0xFF,0xFF,0xFF, //10-17
        0x01,0x5c,0x65,0xb0,0,0xff,0xff,0xff,//18-1F
        0x0f,'2','0','1','4','.','0','5',   //20-27
        '.','1','1','V','0','.','1','0',     //28-2F
    };



    #pragma location = 0x1000定义数据开始位置,info flash地址从0x1000开始,也可以定义到其它地址。



    对于已经设置好的参数或者数据,不希望每次下载程序时修改或者重新设置,可以在IAR中进行如下设置:   

    1.png (33.84 KB, 下载次数: 0)

    下载附件  保存到相册

    2014-7-17 09:47 上传


    在Download选项Flash erase选项下选择只擦除main memory,就可以保存上次的数据。

    由于FLASH只能扇区擦除,修改FLASH数据的时候可能比较麻烦一点,要按照读-修改-写的模式进行操作,把整个扇区的数据读出来,擦除扇区,修改完成以后再把数据写回去。

  • 作者:MrKingMCU

    题目:【MSP430 编译器使用经验】+AIR开发环境使用

    我接触MSP430单片机是在大二的时候,当时已经学过51单片机,其他型号的单片机也用过,像STC12C5A60S2、STC5210AD都过。当时主要是在社团有人带,自己对这方面也感兴趣,学长他们跟着老师做项目什么的都说在参加大赛的时候430会用到,就拿他们的板子和仿真器学了 省了一笔钱那......
    ********************************************************************
    下面写的仅仅代表我自己的一些东西,拿出来跟大家分享一下,下面说的方法
    在论坛上没看到有人写过,可能是歪门邪道,但是我用起来感觉还可以。
    另外就是小弟水平有限,一些东西的理解可能不够透彻,说的不对的地方还请
    大家指正
    *********************************************************************
    这个程序是上学的时候写的一个,IAR的设置我就不写了,前面好多坛友写了好多,我下面就写写自己使用IAR写的这个小程序吧

    每个功能我写了一个头文件,比如key.h和key.c,h文件里放的关于这个功能的定义,c文件里放的是这个功能的子函数,比如按键检测等等。所有的.h文件包含在一个#include"includes.h"文件内,下面是includes.h文件的截图
      
    包含.h文件之后,c文件要自己添加,.c文件开头要包含一个头文件,那就是#include"includes.h"这样会把所有的头文件包含进去,这样在你写某个功能的时候要用到其他文件里的一些东西,就不需要自己再包含来包含去的。
    下面是main函数里while(1)循环里的程序,其实想写个多任务处理系统的,但是水平不够,没写出来,就模仿了一个“伪”系统
        if((TACTL&TAIFG)==TAIFG)//产生系统时基
        {
          TACTL &=~TAIFG;
          AdcTimerFlag++;
          KeyTimer++;
          ShowTimer++;
        }
        if(KeyTimer >=KEY_TIMER)
        {
          KeyTimer=0;
          P5OUT = ~P5OUT;
          key();
        }
        if(AdcTimerFlag >= 2)
        {
          AdcTimerFlag = 0;
          ADC12CTL0 |= ADC12SC;
          while(ADC12CTL0&ADC12SC){}// 等待AD转换完成
          ADC12CTL0 |= ENC;
          AdcSum0 += ADC12MEM2;
          AdcCounter++;
        }
        if(AdcCounter >=64)
        {
           AdcCounter = 0;
           AdcResult0 = (AdcSum0>>6);
           Ad = AdcResult0;
           if(Lock_ADZerro)
             AdZerro = AdcResult0;
           AdcSum0 = 0;
        }
    用一个定时器产生1ms定时,然后给每个任务设置一个flag,没1msflag加1,然后给每个任务设置一个时间,比如按键处理任务我设置的20ms一次,当按键任务的flag>=20的时候,flag清零,然后执行按键操作。这里要注意的是,每个任务中都不能出现while循环等待的情况,这样有时候会导致整个系统停在那里,一直等待响应。

  • 作者:swustlx86

    题目:【MSP430 编译器使用经验】+快捷键的使用介绍

       最开始使用MSP430单片机还得追溯到大学时期了,那时参加一个比赛,使用的就是MSP430F149,想想还是多久之前的事情了呢,废话不多说了。

        1、习惯keil的朋友都知道,keil里自带了块注释语句的快捷图标   ,使用这个工具可以很方便的对程序进行块注释或者取消块注释。我用的IDEIAR for MSP430,这个软件没有类似的快捷图标,但是软件有提供相关的快捷键,那就是Ctrl+K(块注释),Ctrl+Shift+K(取消块注释)。我的IAR版本为 IARFOR MSP430 V5.5,可以在【Tool->Option->KeyBindings里找到,到达此界面后,在【Menu】里选择【Edit】就可以找到,分别为BlockComment(块注释)BlockUncomment(块注释取消)的快捷键。如图


        但在使用的时候,需要注意的是系统输入法,如果采用搜狗、谷歌、百度等输入法的时候,有些快捷键可以回重复,如我使用的是搜狗输入法,在使用Ctrl+Shift+K快捷键取消块注释的时候,则会弹出搜狗是软键盘输入界面,如图
       需要更改输入法为中文(简体)-美式键盘等系统输入法才可以。
    2、对于某些习惯使用文本编辑器来写程序的朋友来说,程序在文本编辑器编写好之后,导入IDE时,出现的错位现象可能让程序看起来很不舒服。比如像以下这个现象,虽然程序编译没有任何的问题,但是在可读性方面就差了很多。
       遇到这种的话,是不是有点烦人呢,幸好软件给我们提供了相关处理的快捷键,那就是Ctrl+T,鼠标选择以上代码,使用快捷键Ctrl+T后,程序如图显示。
       是否好看了许多呢?
       如果整体程序都比较乱的话,可以直接Ctrl+A全选,再用Ctrl+T进行格式化。
       当然,还有很多其他的快捷键,读者可以在【Tool->Option->Key Bindings】中自行查阅。
    3、如果在编译的时候,提示某一行出现错误,但是要如何才能知道程序到底是在哪一行呢?或者看程序总体的行数,要如何呢?


    可以在【Tool->Option->Editor】中实现,那就是【Showline numbers】选项,如图。
      通过此设置,可以显示程序的所在行数。如图
      以上是自己是使用过程中,遇到的一些难题,希望对没有用过的人提供一些帮助,知道的大神就飘过了,呵呵~~~~~


  • 作者:digitaltek

    题目:【MSP430 编译器使用经验】+ IAR中栈的设置

    开发MSP430的的程序,使用IAR开发环境是比较多的,印象中CCS应该是这两年才开始支持430的。

           在调试程序的时候如果碰到栈溢出的情况就会导致程序异常,而这种异常一般不太好查,
    如果我们能够看到栈的使用情况,在栈溢出的时候能给出报警那么对于调试程序来说是非常有用的。

          在新建IAR工程后栈的图形显示和栈溢出报警是不打开的,可以按如下方法打开,tools->options->stack,
    把两个勾打上 如下图1
      
    图1 打开栈图形显示和栈报警

         打开后在调试的时候就可以显示堆栈的使用情况,在栈溢出时也会提示,如图2
      
    图2 可视化堆栈使用情况

         如果栈空间使用比较多,那么可以手动设置栈的大小,如图3中改成了400字节,默认不改的话是80个字节
      
    图3,设置栈大小


  • 作者:hh376158101

    题目:【MSP430 编译器使用经验】+ IAR之工程管理

    现在给大家分享一下我在使用IAR过程中的一些小心得,希望对初学的朋友有所帮助。

    我们知道TI的CCS用在MSP430开发上很有优势,可以很方便的查看各种官方例程,还可以通过GRACE图形化配置更高效快捷的完成MSP430配置工作,这是IAR无法比拟之处。但是,其相对IAR而言要略显复杂,在电脑配置低或者是电脑满负荷工作时,CCS启动慢,调试编译慢的问题尤为明显。接下来,我将为大家讲解如何利用好,管理好TI提供的example code。

    首先,我们到TI官网下载最新的example code (这里以msp430g2553为例)。查找到MSP430G2553资料,选择“工具与软件”菜单,

    找到 ****code examples ,点击下载即可。

    解压得到我们需要的example code 文件。我们看到很多片内外设的驱动程序。我们根据需要,复制粘贴。可是你在学习查看过程中需要频繁的查找打开关闭这些文档,有时用记事本打开还会遇到排版混乱的问题,略显麻烦。

    其实,在你第一次使用这些例程的时候,你可以为其都建立一个工程,而这些工程保存在同一个工作空间下。这样你打开一个工作空间,就能查找到所有的驱动程序,并且每个工程都能方便快捷的独立运行。在一个较复杂的系统中,为了方便调试各子模块、子系统,也可以使用这种工程管理模式。

    下图为各工程目录。


    IAR的界面挺简洁的,工具栏比KEIL的还简洁,不过我们可以通过快捷键操作,加快编辑速度。下面附上IAR的一些常用的快捷键:

    自动缩进排版 :Ctrl + T

    添加注释        :Ctrl + K

    删除注释        :Ctrl + Alt + K

    选择大括号内的内容(带括号):Ctrl + B

    选择大括号内的内容(不带括号):Ctrl +Shit +  B

    自动补全单词       :Ctrl + Alt + Space

    这是msp430g2553官方例程的部分工程文件,有需要的朋友自己添加完善哦


  • 作者:穿越火线大月

    题目:【MSP430 编译器使用经验】+IAR编辑框分框

    IAR编辑框分框许多人都已经试验过的东西,不过对于调试大程序的人来说还是很实用的一个东西,我就比较喜欢这个东西的!


    1、这个是主界面
      
    2、点击window--split
      
    3、拖动鼠标选择要分开的窗口个数和大小
      
    4、如图,分了大约四个窗口,点击某一个窗口即可激活该窗孔进行编辑
      
    5、滑动滚动条即可参照相应的程序进行调节
      

    4

    总结:这个命令很简单,在调试的时候方便找到错误,最重要的是这个命令很适合笔记本的特点,如果是大屏幕看程序也就无所谓 了!!希望对别人能够有所帮助!!

  • 作者:我不懂

    题目:我的IAR经验

    一年前开始学习MSP430MCU ,也一直用的是IAR的编译器。使用最多的是MSP430G2553Launchpad,在线下载和仿真,


    建立工程的最近本步骤相信大家都会了  
    下面步骤是选择Launchpad 在线调试的必要步骤:

      
      

    完成着两个步骤之后就基本上可以实现在线调试的功能了(当然要保证你的硬件的没有问题的)

    当然,我们使用直插的20或者14引脚的G系列430MCU的时候可以直接的插到Launchpad上就可以下载了,想G25G24系列的,但是当我们想用贴片的MCU 的时候呢?可不可以也直接利用Launchpad 上的仿真器直接在线仿真呢?答案当然是可以的咯。


    下面用MSP430G2231来举个例子吧!

    首先,我们找到LaunchPad 上面的几个编译时用的是几个引脚,如图:
    所示:

      

    五个引脚从左到右分别是:TX , RX , RST , TEST , VCC,  当然还要加上地线GND,一共需要者6条线。

    接着我们打开MSP430G2231的文档,直接看引脚的定义可以找到如图所示:

      

    当然啦,要是英文不好的话,也可以下载个中文的文档看:
      

    找到对应的引脚之后就好办事了:
    MSP430G22311引脚(VCC)接电源正端  14引脚(GND)接电源地
    8引脚接Launchpad TX  
    9引脚接Launchpad RX
    10引脚接Launchpad RST 
    11引脚接Launchpad TEST

    这样子,6条线都接好了。建立好工程之后按照上面的步骤设置好就可以实现在线下载和硬件仿真了。对应的G系列都可以用这个方法实现哦!

    只要对应的线连接好,基本上就可以现实了。

    MSP430F系列的程序下载一般都先生成txt类型的文件,在使用相应的下载器和下载软件下载;要生成TXT类型的文件的设置如下
      

    最后给大家分享一下比较常用到了两个快捷键:ctrl+k 屏蔽选代码:
    ctrl + shift +k 取消屏蔽 ;知道 这个的话对有些人刚从KEIL转型过来的可能比较快适应吧。

  • 作者:sacq

    题目:【MSP430 编译器使用经验】用IAR编译其实也可以很简单

    2年前就开始学习430,又是安装CCS,又是不同版本的CCS,又是FET-MSP,操作过程复杂,学习进展缓慢。

    去年底另外又装了IAR的430版,用了下,感觉大不一样,跑了430的大部分例程,几乎没什么障碍。还从例程中学到了不少东西,自己也学着编写一些简单的程序。

    准备工作是在成功安装好IAR430版,下载了MSP430的有关例程。
    另外,IAR的MCU已经选择正确,下载器驱动已经搞定,相关过程可参见《手把手教你使用 TI MSP430 LaunchPad》。

    下面主要用截图记录编译例程的部分过程。

    点开例程包里的文件夹C,先看看例程里有哪些程序吧,README文档里有详细的说明:

      

      


    打开IAR,准备建立一个工程:

      

      

    这两个选那个都行,感觉只有生成的文件名的后缀有区别(.c 或 .cpp)
    不妨点开“C”后,再点“main”,再点OK

      

    取好工程名后(.ewp),保存。

      

    main.c文件里已经替我们写好了几行

      

    用“记事本”打开感兴趣的例程,把文档全部复制下来,贴到刚才打开的main.c中的所有文档

      

    贴进来了:

      

    接下来,可以编译一下,有可能要求输入一个名称,不妨与刚才的一致,保存为.eww文件(可能是工作环境参数)

      

      



    编译完毕:

      

    12.jpg (20.17 KB, 下载次数: 0)

    下载附件  保存到相册

    2014-8-16 10:35 上传




    如果接好430板,可以考虑下载了(点下图中绿色三角符号)。

      
    (红色圆点是DEBUG)


  • 作者:眼大5子

    题目:win7安装并绿化IAR

    介绍如何在WIN7系统下安装IAR并且正确绿化软件
    所有软件的安装都要右键以管理员身份安装。
    尤其是注册机,切记,否则无法正确读取HostID
      
    左边是双击运行读取的错误HostID,右边是以管理员身份运行正确读取的HostID
    运行注册机的时候还要注意如果读取到的HostID 的0x后面字母是小写请务必手动改成大写,否则破解不成功。
    正确操作以后选择产品名称型号,Get ID即可。


  • 作者:sdrcust

    题目:晒出我使用MSP430编译器的经验与技巧

    刚接触IAR软件不久,下面发一些整理的图片,希望给初学者一点帮助和启示,软件的按照和破解就省略了 论坛有下载   http://bbs.eeworld.com.cn/forum. ... r%2B%2B430%2B%2B5.5   为减少文字说明,本人尽量在图片上作说明,网上也有大把教程可以参考;1 建立一个工程 file----new-----workplace 
      

    2 打开/新建工程
      弹出如下框:
      
    按下图中操作
      
    继续
      

      

      

      

      

      

      

      

      

      

      

      


    下图是使用中的一些快捷键,可以用用体会下;
      

    下图是调试时遇到的情况(已解决)
      

    下面是网上找到的几点贴出来:
    1、更改注释字体的方式:在代码段点击右键,找到Options->Editor->Color and Fonts ,然后找到Syntax Coloring,再找到C++ comment和comment,然后将左侧的type Styles 改成 Normal 就可以了,还可以把注释的颜色改成绿色,这样更加适合我们的习惯。其次在这里还可以更改C或C++里面关键字的颜色。
    2、显示行号:在代码段点击右键,找到Options->Editor,将右面的Show Line Numbers 勾选上就可以了。
    3、设置Tab键:在代码段点击右键,找到Options->Editor,将上面的Tab Size设置为4,Index Size 也设置为4这样就可以实现直接按Tab键就可以缩写4个空格。

  • 作者:qiushenghua

    题目:使用CCS不愁找不到资料和例程

    使用CCS有段时间了,刚接触430的时候,想必各位都会到处去找例程学习,找来的例程却不一定与自己选择的单片机或者开发工具相适应。我曾经就在某论坛花金币下载了所谓的“430ValueLine”的例程,下载下来却发现是G2211的,而我的单片机已经更新到G2553了。部分硬件不一致需要重新修改参数才能下载运行。最近在使用CCS的时候,发现其实不需要那么复杂,CCS自己就带有一个例程库和资料库,它支持的芯片基本上都有例程,相应的资料也在里面。当然,需要连接因特网才能使用,有些公司限制网络的就享受不到了。
      
    这个资源库在CCS的View-Resource Explorer (Examples)下(见图1)。点开之后:
      
    看到它分为MSP430ware和TI-RTOS for MSP430两个部分。TI-RTOS我暂时没能用到,这里主要讲讲MSP430ware。
    展开MSP430ware,可以看到Devices、Development Tools 、和Libraries三个部分,我们从上往下依次看看:
      
    首先,展开Devices,看到430全系列的单片机都在里面。展开我们熟悉的G2xx,看到用户指南User's Guide, 数据表Datasheets, 勘误表Erratasheets都在里面,全系列的都有。同时还有代码示例Code Examples和图形化示例程序Grace Examples。这里特别要提一下这几个文件,个人认为,编写代码的时候更需要参考用户指南User's Guide数据表Datasheets是在选型时使用的,通过Datasheet我们可以知道芯片具体拥有一些什么资源,可以达到什么性能。但是在编写代码的时候,具体寄存器的定义和用法还需要看User's Guide才能知晓。

    继续展开,开发板上的芯片是MSP430G2553,于是我们选择G2x53:
      
    看到相关的例程都在里面,针对每个外设的不同用法,都会有多个相应的示例程序。这里我想看看片上温度传感器的用法,于是点击
    msp430g2x33_adc10_03  ADC10, ADC10, Sample A10 Temp, Set P1.0 if Temp ++ ~2C
    看到弹出对话框让我们选择使用的芯片。选好之后点OK,这个工程便会自动导入左侧的Project Explorer里。连上Launchpad,可以直接下载调试。当然也可以打开.c文件查看代码。TI官方的代码还是很有参考性的,一些低功耗特性都有体现。
        
    当然,如果你只想学习C代码,或者汇编代码,也可以点上方的View C-Files或者View Assembler Files查看。
    Grace的例程与之类似,在这里不作介绍,接下来我们看看Development Tools。

    Development Tools顾名思义就是开发工具,展开可以看到我们熟悉的G2、5529、5969金刚狼都在里面
      
    继续展开我们最熟悉的EXP430G2
      
    看到里面资源包括使用指南、设计文件(原理图、Gerbers、BOM)应有尽有,甚至还有出厂IC自带的例程,不知道多少朋友因为当时不小心擦掉了片上的例程而后悔不迭,这下好了,不光程序回来了,还能看到人家是怎么写的。下面的Examples与Devices里的有重复,这里不作介绍。
    当然,430BOOST的一些相关资料也在这里面,不多赘言。


    最后我们看看430的库文件,和G2相关的主要有Capactive Touch Software Library触摸按键,Graphics Library图形库有提到G2,但是没有合适的外设也白搭。
    另外还有一个IEC60730 Development Library居然支持G2553。看来一下这是一个关于可靠性的库,需要开发符合相应标准项目的朋友有福了。
      
    使用其他系列单片机的朋友们也可以从这里找到适合自己的资源,而不必到处去搜索,费时费力还不一定找来的是自己需要的资料。作为一般开发,这个资源库里的东西已经够齐了!

  • 作者:tianshuihu

    题目:IAR软件仿真与算法优化

    从接触单片机以来先后使用了Keil、IAR、CodeWarrior、CCS、Atmel studio...各种开发环境,各有优缺点
    经过时间的洗礼,总的来说对Keil和IAR的印象最好!
    Keil是最先接触到的编译器,界面十分美观、友好,软件仿真也很方便,但是不支持硬件仿真(传统51单片机),
    另外51的内存太小,外设不够丰富,处理速度尤其是乘法运算的速度不够快,所以入门之后用的就比较少了

    再说MSP430和IAR,第一次接触的430是149,没想到单片机居然可以做这么小,而且自带ADC、PWM、多路可中断IO等很实用的外设,并且其时钟源应用非常灵活,自带硬件乘法器....只需一次就深深的爱上她了
    更让我惊喜的是其开发环境IAR居然把编译、链接、下载(或仿真)集合成一体,对于软件调试十分方便!并且其下载工具也十分丰富,并口或USB的JTAG下载器、BSL下载器等等

    再后来TI推出了G2系列的LaunchPad,这块板子自带下载器,同时十分小巧,和IAR配合可以快速开发一下小的应用,从此这款LaunchPad几乎成了我实验桌里面必不可少的一块开发板!

    下面说两个基于IAR开发LaunchPad的经验或者故事吧





    1.利用软件仿真优化算法

    单片机不像电脑有着强大的运算能力,所以应尽量优化算法,减少其运算量
    TI 的官方参考例程利 "msp430x20x2_adc10_temp.c"中有用片内AD的第10通道采样热敏元件获得温度,有如下一段程序

    long temp;
    long IntDegC;


    ....
        // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
        temp = ADC10MEM;
        IntDegC = ((temp - 673) * 423) / 1024;

    前面是两个变量的声明,后面是将AD量化的信号ADC10MEM装换成温度值IntDegC

    其实long型的声明完全没必要,int已经够用(10位的AD),这里先不做探讨(或许设计者是为了保险起见,而我没发现其妙处)


    下面说说优化
            IntDegC = ((temp - 673) * 423) / 1024;
    这条语句等效如下

    等效一:
        IntDegC= temp*0.4131-278.0068;
    等效二:        
        temp   = (temp - 673);
        IntDegC= temp*0.4131; 
            
    修改完成之后,在Debug模式中选择 “Simulator”,可以模拟一下看看哪种方式更快、更准
    编译之后,点击下载即可开始仿真,F11为单步执行,F10为执行当前行
    图中标示的框3中“CCSTEP”可以看做是机器周期,每执行一步其值都会更新,并显示为红色

      

    我分别试了3个初值,最终的运算结果3者相同,但是消耗的“CCSTEP”却不同,结果如下

       ADC10MEM 原始语句(CCSTEP 等效一(CCSTEP 等效二
    678
    570
    728
    576
    700
    604
    708
    556
    789
    632
    688
    541


    从上表可以看出,整体来说等效二的处理方法更高效一点

    当然,这里只是一个小小的改进,起到抛砖引玉的作用,期待大家能发现更多

    PS.其实如果把long型的声明改为int的话,结果也是对的,并且原始语句仅需要200个CCSTEP即可获得正确的结果,而后面的两种等效消耗时间变化不大
    这是因为long型(4字节)的乘法明显比int型(2字节)运算量大很多;而后面两种等效用到了浮点数的乘法,可比性不大
    另外,一般来说比较精确的温度需要保留一位小数,这时等效一和等效二的优势就比较明显了,大家有兴趣可以对比一下,我就不再罗列了


    2. 软件仿真获取精确的延时
        经过上面的仿真就会发现同一个等式,初值不同时,运算消耗的时间是不一样的
         但是有时候又想获得准确的延时,这时候软件仿真就可以派上用场了;
    你只需把断点设到延时函数所在行,然后F10一下,即可得出该函数消耗的 CCSTEP
    另外,需注意这个CCSTEP的时间为一个机器周期,即主时钟的一个周期,需要换算之后才能获得实际的延时

    3. 软件仿真与硬件仿真
       软仿真的好处是不依赖于硬件,当遇到问题时可以帮你判断是不是软件方面的问题,如果不是再从硬件方面着手去解决,免得面对问题无从下手
    但是有时候,系统需要配合外设才能工作,那只能硬件仿真了,这时候断电的设置就很有用了......


    最后再补充一下,软件仿真通过了,并不意味这硬件就能很好的工作!
    比如有一天我发了几乎一个上午的时间去调试一个通讯的程序,发现有个指示灯总是莫名的闪烁,但是软件仿真看不出任何问题

    最后翻出了原始的程序才发现我把第一行,关闭看门狗的程序弄丢了。。。哎,瞬间有种可笑不得的感觉

    学习使用430好久了,今天小小的总结一下,思绪不够清晰,大家见谅!

    附件是官方提供的利用内部AD测温源程序,有兴趣的可以试试

    ADC10 仅在MSP430G2x53 器件上提供


  • 作者:nwx8899

    题目:【MSP430 编译器使用经验】+CCS GRACE的使用 

    如果使用低于5.2版本的CCS,可以独立安装grace,安装后能看到有一个像大写字母G的快捷方式
    打开grace
      
    如果安装的是v5.2版本,grace以一种工具的形式包含在ccs中。
    File new ccs project
      
    之后下面会多出一个grace project 如下图所示
    Finish
    之后会多出一个.cfg文件如图
      
    device overview 就可以对430单片机各个外部模块进行基本的配置,初始化过程都是图形化的,勾选就可以了。
      

    下面只配置一下GPIO,一个简单的实验实现按下S2 /P1.3LED1/ P1.0,不按则不亮。
      

    点击上图中的PORT1,出现
      

    再点击第三个标签,
      


    通过下拉选项,按下图设置
    P1/P2,进行引脚详细设置
      

    其实在这两个标签下设置都是相通的

    至此 基本配置已经完成
    source就可以看到代码了
      

    你的主函数你多了一个初始化函数CSL_INT();(就是你刚才要实现的实验)
      
    点击DEBUG  下载即可。

  • 作者:armcu

    题目: IAR 环境下的函数定位加载(分散加载)方法

    以MSP430AFE253为例分享IAR(5.5)环境下的函数定位方法

    1、修改XCL配置文件

    在IAR的安装目录 Tools\430\config下找到lnk430afe253.xcl文件,将其拷贝到当前工程目录下;

    设置项目中链接文件的位置(将默认位置改为修改后lnk430afe253.xcl文件的存放位置),如下图所示:

      

    打开 lnk430afe253.xcl 文件,找到 CODE 字段的定义,在其中添加以下语句:

    // 在我的项目中需要将一段代码放置在地址 0xF000 起始位置处,故定义 MYCODE 代码段如下
    -P(CODE)MYCODE=F000-F1FF

    如下图示:

      

    2、在代码中指定下载位置 

    共有两种写法可以实现函数的定位:

    1)、void fun(void) @ "MYCODE"
            {}
    2)、
           #pragma location = "MYCODE"
           void fun(void)
          {
          }   

    另外,结束后要回复编译器默认的定位

    #pragma location = "CODE"

    3、下载后查看FLASH内容 

    代码示例:
    #pragma location = "MYCODE"
    void DefaultIO(void)
    {
      P1DIR  = 0xFF;
      P1OUT  = BIT3;
      P2SEL &= ~(BIT6 | BIT7);
      P2DIR  = 0xFF;
      P2OUT  = BIT0;
    }
    #pragma location = "CODE"

    下载后memory内容截图:

  • 作者:joywu

    题目:工欲善其事、必先利其器之入门IAR

    要用MS430实现你的各种设计、想法。熟练掌握一个或者多个IDE工具是必须的,平时使用IDE开发的时候大部分时间花在输入代码和查Bug,输入代码我们希望编译器把关键字突出显示,这样万一我写错了,可以及时发现,编译的时候看到编译结果可以迅速定位到相应的行,或者我要使用结构体,switch,等常用数据类型、语句的时候可以有个模板快速插入。
    这篇文章要解决的就是上面的这些问题,帮助你快速定制你自己的IDE
    没有定制之前,打开一个430的工程会是这样的,
      
    定制之后上这样的,
      
    关键字突出显示,字符串和字符、数字也可以明显区别开来,左侧开启行号显示。
    首先把关键字显示设置下,在编辑窗口空白处右击,弹出常用菜单,点击最底下的Option,弹出设置窗口
      
    在右侧把show line number 选项勾上就可以开启行号显示了。
      

    然后点击并展开Edit项,在里面就可以设置关键字、字符串、字符、数字的显示颜色,字体等;
      
    大家可以参考我的设置,平时在输入代码的过程,免不了会经常使用for语句,在IAR里面自带了for语句模板,我们可以很轻易的把整个for语句添加进来
    同样上右击,弹出快捷菜单,选择 Insert Template(插入模板)
      
    里面有if,也有for,还可以自己添加switch,while等常用的语句,在弹出的对话框里面填入参数即可
      


    至此就完成了基本的编辑环境的设置,另外还有一个常用的技巧,按住Ctrl+滚轮可以对编辑窗口进行放大和缩小。

  • 作者:数码小叶

    题目:IAR以及CCS的正确安装

          关于这两个软件的安装,论坛已经有很多的帖子了,大家可以自行搜索。但在实际使用过程中,发现还是有很多人安装不成功,表现为安装成功,但一编译就报错,可是检查下来,都会说我是按那个安装步骤来的啊,其实还是存在一些容易忽略的地方:

    1:安装路径最好不能有中文,这个一般大家都知道;

    2:关于IAR注册不成功的原因解释:
          这个问题尤为常见,怎么注册大家都很清楚,关键就是很多人都注册不成功,自己也找不到原因,其实问题的根源出在win 7的UAC上(UAC(User Account Control,用户帐户控制)UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改,但同时,也给正常安装带来麻烦,所以安装的时候应该右键,然后点击“以管理员身份运行”
      
    这样,你的软件注册信息才能生效,同样,在生成许可文件的时候,也别忘了“以管理员身份运行”。




    3:ccs的安装报错:
    很多人安装ccs都出现了下面的错误
      
    这个错误其实也很简单,有两个原因,一个是你软件没下全,这个可能性一般不会出现;第二个就是杀毒软件捣鬼了,安装ccs之前应该关闭所有的杀毒软件
    以及安全软件,如果你不放心可以拔掉网线,离线安装。这里有一点比较麻烦的是,安装瑞星和小红伞的可能要自己手动关闭相关安全进程。


    关于ccs的第二点是License的安装,ccs可以申请免费版 License,论坛也有相关教程。
    License的位置好多人不知道:
      
    安装完后,要再次进入,把你的License勾上:
      
    注意:License同样不能再中文路径下!!!这个一定要注意,见了太多人都是用的安装包路径,而安装包路径又有中文,结果使用过程中就是一直提示License错误。

  • 作者:弋木夹子

    题目:【MSP430 编译器使用经验】+ 基于快捷键的CCS小技巧

    一开始用CCS时,会各种误触,然后就调不回去了,所以想到小技巧什么的,第一反应就是各种快捷键了,放上一些常用的快捷键吧,希望有所帮助

    向上滚动一页 Page Up
    向下滚动一页 Page Down 
    向上滚动一行 Ctrl + Up 
    向下滚动一行Ctrl + Down  
    选择文本 left Shift + left arrow 
    选择字符 right Shift + right arrow (最早的时候瞎按成字符模式,不知道怎么调回来只能退出···) 
    选择一个词 left Shift + Ctrl + left arrow 
    选择一个字 right Shift + Ctrl + right arrow  
    选择行 Shift + End  
    选择开始行 Shift + Home  
    全选 Ctrl + A  
    编译文件 Ctrl + F7 
    停止 Shift + F5 
    重置模拟器 Ctrl + Shift + R 
    连接或断开 Alt + C 
    移动到文件底 Ctrl + End 

  • 作者:霹雳之火

    题目:IAR开发MSP430入门篇 

    IAR有针对很对种芯片的版本,比如针对ARM核的IAR for ARM. IAR for AVR是针对AVR单片机的,IAR for MSP430是针对TI出品的MSP430系列单片机的. 你需要根据你使用的芯片选择.
    为了学习用,可以下载先尝试一个破解版的,我使用的是IAR for MSP430 5.5,找度娘就可以下载到,只有100M,相比其它上G的开发工具,已经很浓缩喽。
    IAR是个优秀的IDE,可以让我们开发MSP430方便
    闲话少说直接来体验IAR开发MSP430的过程

    1 打开IAR embeded workbench
      

    2 IAR打开的初始界面,下面将开始MSP430编程之旅
      

    3 首先肯定需要新建一个工程
      

    4 弹出对话框,选择c(当然也可以选择汇编了,不过新手还是先上c吧),如果选择c下的main,工程会自动帮你创建main.c
      

    5 选择工程保存路径以及工程名,既然是新手就叫first吧,然后点击保存
      

    6 弹出对话框选择确定,意思是会生成main.c(因为前面选择了)
      
    7 展开左边的工程文件,可以看见已经有main.c了,并且帮我们关掉了看门狗
      

    8 新建文件,如果是才文件最好先保存.c的格式,这样会有彩显,有的错误编程中容易发现(程序就不写了,新手可以参考官方例程)
      

    9 将写好的c程序加入到工程中(为了便于管理,可以先建个组在加入)
      

    10 接下来就是相关设置,在工程上右击鼠标选择options
      

    11 在General Options下的device选择你的MSP430芯片对应的型号
      

    12 再选择dedugger,在Driver的下拉菜单选中FET dedugger
      

    13 在选中左边的FET debugger,在connection下选择你的烧写或调试工具,当然还有其它设置,这可以深入了再学习,选择OK
      

    14 点击右上角的make,编译程序,接着你就可以直接烧写程序或者调试程序
      
    结语:这就是IAR开发MSP430的整体框架,当然还有很多的知识要在不断地深入学习中,熟练掌握操作开发环境和配置开发环境的方法

  • 作者:rowen800

    题目:【MSP430 编译器使用经验】+ 技巧经验汇总 

    如果要使用MSP430进行开发,那么IAR是一个很好的开发环境,这里针对IAR,把一些经验技巧总结如下:
    1、IAR的安装。这里我是用的破解,咱们只是用来学习,相信也不构成侵权吧?破解的方法网上找,不会的可以找我。
    2、工程的建立。如下图:


      

         点击“project”---"creat new project",就弹出如上图所示的页面,如果用C语言开发,就选C-main,点“OK”,提示保存,将工程保存到指定路径。

    3、编译器的配置。
          第2步完成后,会出现下图所示界面:
      

      

          在右侧选中 test--debug,右键,选择“option”,来对工程进行配置。如下图:

      

          (1)目标器件设置。首先选择general   options ,target,来配置目标单片机,430所有系列单片机都在里面包括,选中正确的即可。“output”选项是用来选择输出是可执行文件或者是库函数,如果输出库函数给别人使用,别人就不会看到你的源代码。其它默认设置就行。
      

      


         (2)编译优化。选中C/C++ compiler -----optimizations,如图,可看到有不同的优化level。其它默认设置。


      

          (3)编译器显示设置。选择工具栏tools---options,打开如下图所示界面,在这里可以设置字体颜色,快捷键、语法高亮等,大家可以根据个人爱好来选择。
      

  • 作者:鲜果

    题目:【MSP430 编译器使用经验】IAR自学经验和收获

    本人也是新手一枚,只能谈谈自己的学习经验和收获~
      关键名词:MSP430F149,IAR,C语言
      进入IAR,在file里面新建一个workspace,然后在project里creat new project,选择C语言 main函数,再自己命名保存 就新建ok了!
      改成如下就开始程序生活啦~同时还要一边复习C语言!!!
      

    Some Tips:
    1.记得关闭看门狗啊(新手有一次忘记关看门狗,就出错了!)。
    2.生成一些头文件可使主程序调理清晰,更方便测试修改。
    3. 添加  #include<stdio.h>
            sprintf函数非常好用

        sprintf(c,"%g",s);  //就是把s的值放在数组c中按%g格式输出       另外还可以整型%d,浮点型%f,等等
                                     //%g可以输出小数(保留6位有效数字)或整数,末尾自动去无效零,解决了小数输出的问题
                                      //  sprintf(c,"Result=%g",s)还可以这样哦!及其方便哦~
    4.仿真的时候这个千万不能忘诶···
      


      最后

      祝大家都在学习和生活中进步,每日都有新收获!
      祝自己天天向上!

    QQ图片20140801104451.jpg (13.15 KB, 下载次数: 1)


  • 作者:youluo

    题目:【MSP430 编译器使用经验】+教你如何用IAR入门430

    安装IAR后需要破解。至于如何破解相信网上很多资料。可以下载一个注册机。然后就行了,如果你没破解就算程序完全对的编译也不会通过的。

    先打开IAR软件。之后。NEW-》workspace          点击project    ->creat new project.这里我们选择430  c->main   如下图所示。

      

    点击OK弹出如下界面。保存在自己新建的文件夹下。
      

    在左边框内右键选择OPTION。填出对话框如下。
      

    点击general options ,,在device里面选择自己用的是那种430.、
    然后点击debugger   在driver里面选择。如果是模拟就选simulator.如果是下板子的就选FET.

      


    点击FET debugger .这里根据仿真器选择。我用的是usb仿真器。就选择teax instrument usb IF.如图。
      
    点击OK之后然后就可以在MAIN.C里面进行编程了。编译通过之后可以点击上面工具栏那里有个绿色的按钮就是调试的。另外关于如何添加c。h 文件日后再详细补上来。
      

  • 作者:Rufer

    题目:【MSP430 编译器使用经验】CCS代码编辑的几个常用设置

    第一次发帖,分享几个我觉得比较常用的CCS代码编辑设置
    1、代码的折叠
    代码写多了很长,不方便查看,这时可以右键单击行号左边任意空白处,在弹出的菜单中选择Folding-->Enable Folding,这时每个函数名字的左边便出现了一个折叠的符号,可以进行函数的折叠,如图:

      

    代码折叠后:

      

    2、代码的自动批量注释
    一般的编译器都有这个功能,我大CCS怎能没有?直接上快捷键,选中要注释的代码行,同时按下“CTRL”键和“/” 键,取消注释也是同样的按键,此为"//"的注释方式,"/**/"的注释方式快捷键为"CTRL+Shift+/",取消注释为"CTRL+Shift+\",不知道为什么CCS不把它设置为同一个

      

    3、代码的格式化
    快捷键为"CTRL+Shift+F"(没反应的话可能是搜狗输入法快捷键的冲突,在搜狗输入法的设置中将对应冲突的快捷键修改一下或者直接屏蔽即可),而代码的格式化设置在Windows-->Preference-->C/C++-->Code Style-->Formatter设置,默认有4种代码格式风格选择,我们也可以按"New.."添加自己的代码格式风格,如图:

      

  • 作者:hanskying666

    题目:【MSP430 编译器使用经验】+IAR基础应用篇

    从接触单片机开始就使用MSP430,编译环境使用的是IAR,记得型号是MSP430F2012,这款单片机就十几个引脚,片上资源也很少,其实当时刚刚接触单片机对什么片上资源也没有什么概念,现在用了149,169,1611,427,449,5438等系列的单片机后才对系统的资源有了清晰的认识,在这想和大家分享几点使用心得:
    (1)比如最基本的RAM,RAM包括,你在工程中定义的全局变量,堆栈占用的空间,已经固定的寄存器占用一部分,大体分为这三个部分,其实在初学时候很容易忽略一点就是修改IAR编译器的堆栈大小,当写的一个函数使用了较多的局部变量时,消耗的堆栈资源过多,会造成堆栈溢出的现象,程序跑飞,单片机重启等等,较多难排除的现象。下面是IAR设置单片机堆栈的大小,如果以后有童鞋碰到类似的地方记得预估一下自己局部变量的多少,适当的开辟相应的堆栈大小。
    (2)还有一点是,如果你定义了较大的数组,其实MSP430在启动的时候是要初始化这些数组的,如果数组定义过大会造成时间超过看门狗时间造成程序跑飞的现象,因此需要在初始化这些数组之前将看门狗关掉,注意不是IAR中main函数的关闭看门狗,是汇编中的关闭看门狗哦。
    (3)IAR_430编辑界面虚线左移修改方法,有时候IAR编译器的编辑界面虚线会移动到靠左边的位置,编程界面很难看,按照下图做法即可改变过来。


    1.jpg


  • 作者:陌路绝途

    题目:【MSP430 编译器使用经验】+IAR头文件添加技巧

    使用IAR,如果没有头文件,编译肯定通不过,更加不用说继续设计了,本人使用IAR进行MSP430开发,选择原因是因为CCS所需内存太大了,keil已经无法满足MSP430的某些功能了,对于IAR集成开发环境,我们从事一个项目开发,首先就是要添加头文件,头文件相信大家都不陌生,使用C语言开发的时候我们见到过无数的“#include<>”和“#include”都可以添加头文件,说明一下:放在自己工程目录下的头文件要用#include "msp430g2553.h" ,系统目录下的头文件才用#include<iomsp430g2553.h>,当然你自定义的头文件可以在系统头文件库里面的。
    个人使用IAR总结的添加头文件的技巧:
    1):将头文件msp430g2553.h保存在当前工程目录下,和main.c放在同一个目录当中。这样就无需在workspace里面进行手工添加,只需要在main.c或者在对应的c文件中include进来即可 ,编译成功完成后会自动出现在相应的.c文件下。这个方法简单而且也不容易出错,因为我们在项目开发的时候,设计的文件大,很容易忽略这些细节的。这个方法可以在项目开始就解决掉问题。
    2):当我们开发的项目文件较多时,.c.h文件混在一起显得文件数较多且显得很乱。我们不好迅速找到我们想要的文件,这点比较麻烦,这个时候,我们可以使用另外一个方法,就是右击workspace中的Debug项,add -->add group ,自己可新增如名为自己定义的组文件夹,将.c.h文件作一个分类来进行管理,这样更加的直接明了,很适合用于大项目多文件的开发。


  • 作者:FireLife

    题目:【MSP430 编译器使用经验】+IAR软件仿真

      利用IAR软件进行仿真的时候,很多新手可能会遇到这种错去提示(图片1),这个时候,大家不需要设置其他的什么。如果你用的是IAR的话,那么你只需要在编译环境中你所建的工程文件上单击右键,选择option,然后设置里面的linker就行了。如果你要仿真择将output选择为生成debug information for C-SPY,如果想把写好的工程进行编译,下载到单片机中,那么你就要将这里的output设置成other-------即生成 .txt的文件(下载单片机的文件就是他)。对于新手,不建议使用仿真。本人的比较倾向于,下载程序到单片机,观察现象,再结合程序分析程序是否有问题,或者程序应该怎样修改。
        另外分享一点我写程序的经验,我一般是先华一定的时间,将实现的功能,以及所要利用的算法,接口等都列出来,并在大脑中想好程序的大体结构,在开始编写程序。一般先按照自己所想的功能,将程序分为多个模块进行编写(即使有些不会写,也将框架写好,留下空白,等整个程序框架搭好后再来填空)。尽量将一些常用的功能写成文件的形式,方便以后调用,我比较偏向于将一个大的功能分成几个小的功能,然后将小的功能又分为不同的函数进行编写,最后将能够合并在一起的合并到一起,尽量优化程序的结构。
        纯属个人看法,仅供参考,谢谢!!!


  • 作者:kaisy

    题目:【MSP430 编译器使用经验】+IAR 

    1、首先打开IAR软件,其开发界面如下:
      
    2、新建工程:点击界面左上角的File〈New〈File,之后会出现下面的界面:
      
    3、保存新建的工程,根据自己的需要选择工程保存的位置,以及为该工程命名。
    4、接下来就可以为自己的工程编写代码了。

    在使用该软件的工程中,要注意以下一些问题:
    1、在打开IAR工程时,要注意选择合适的IAR软件的版本,否则会出现一些问题。经验告诉我:当工程是在IAR 5.5版本中建立时,如果使用IAR 6.3打开它,便会产生一些问题,所以需要先使用notepad++或者一些其他的文本工具来打开那些(*.ewp)文件,通过在该文件中查找ProductVersion(请注意查找时选择非全词匹配)的一些信息,来选择合适的IAR版本软件,如下所示:
    如果有关ProductVersion的信息如下:
    <option>
        <name>OGProductVersion</name>
        <state>7.20.1.7306</state>
    </option>
    <option>
        <name>OGLastSavedByProductVersion</name>
        <state>7.10.3.6927</state>
    </option>
    那么就要使用IAR 7.2版本的软件来打开这些工程文件。同理可根据需要选择其他版本的软件。
    2、当用IAR软件进行仿真的过程中,如果想要知道运行周期,通常需要执行下面这两步:
    (1)、当然需要打开软件进行仿真了,界面如下(注意下图中的圈圈):

      
    (2)、当执行仿真操作后,就需要打开菜单view〈register   simulator〈function profiler,接下来 就可以查看到函数执行的周期数 和 程序执行周期数,当然我们也是可以结合断点来得到想要了解的运行周期数,这部分的界面如下所示:
      
    3、使用该软件的过程中,要记一下一些快捷键,对开发很有帮助的,当然记住的前提就是多练习啦。
    CTRL+B  括号匹配,片选择代码
    CTRL+F  Find快捷键
    CTRL+SHIFT+F  Find in Files快捷键
    CTRL+K  快速注释,屏蔽选中的代码,就是自动加上“//”CTRL+T  自动缩进,格式化选中的代码,格式在TOOLS->OPTIONS->EDITER->Auto Indent->CONFIGS
    4、可以在最后生成的.MAP文件中查看编译过程中的一些信息。

  • 作者:muxb

    题目:【MSP430 编译器使用经验】+ IAR配置经验分享

    首先打开MSP430的工程,右键打开工程选项'Option',点击Linker选项如下图:
    再打开config标签,设置Linker command file 栏, 勾选“ Override defalt”,在下面的选择框中选择自己的配置文件(.icf文件)。
    在配置文件中,可以自己配置ROM大小和RAM大小,以及堆栈大小,下面是我的部分配置文件:


    这里定义ROM大小:
    /*-Memory Regions-*/
    define symbol __ICFEDIT_region_ROM_start__ = 0x00040000;
    define symbol __ICFEDIT_region_ROM_end__   = 0x00080000;


    这里定义堆栈的大小:



    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__ = 0x100;
    define symbol __ICFEDIT_size_heap__   = 0x200;
    /**** End of ICF editor section. ###ICF###*/


    在这里定义RAM空间大小:
    define symbol __region_RAM2_start__ = 0x20001000;
    define symbol __region_RAM2_end__ = 0x20008000;


    define exported symbol __VECTOR_TABLE = 0x00000000;


    define exported symbol __BOOT_STACK_ADDRESS = __region_RAM2_end__ - 8;        //0x20007FF8;


    为了方便调试,可以修改RAM空间大小和堆栈大小已适用我们的程序,个人觉得比较方便,所以分享给大家,希望对大家有帮助。

  • 作者:Sur

    题目:关于IAR的仿真器链接问题 

    • 测试电脑环境:windows8.1 32位系统(仅供参考)
    • 测试软件环境:IAR5.10.4


    1、首先打开一个工程




      





    2、鼠标移至工程文件处,右击,单击options…


      




    3、在Category中选择FETDebugger

      




    4、在Connection中单击”…” 会出现USBSelection,这样你就可以通过该窗口查看到是否连接正常。如果看到COM就是仿真器链接是正常的,这样就不是板子的问题。如果没有看到COM的话,恭喜您可以继续往下面看了

      




    如果没有看到COM的话,可能是如下问题导致的
    一、有时候会出现USB线的问题,大家请注意下,部分不是正版的仿真器可能存在着USB接口与线连接不紧密的情况,这时候可以换个USB线试试
    二、仿真器的问题:
    1、可能会出现升级后不能使用的情况,这时候可以使用CCS自带的降级功能来将仿真器恢复到升级前的版本。
    2、仿真器故障(可自行修复的故障),直接重新断电重启即可。
    3、十有八九您的仿真器坏了,可以去再买一个了。
    三、还有一个极其悲剧的可能,您的软件有问题
    1、没有安装正版
    2、没有激活
    3、没有使用管理员身份运行(貌似好像也没多大关系)

  • 作者:Sur

    题目:【MSP430 编译器使用经验】+在CCS中一些简单的小技巧

    在编程时,我们会发现有很多很多我们需要注释的地方,如何来注释相信大家都知道,只是如何便捷快速的来注释,可能部分朋友对CCS中的快捷键还有一些不清楚的地方,现在为大家带来一部分TI的CCS中的快捷键介绍,希望能够帮助到大家。
    1、Ctrl+/ 是用“//”注释所选的语句,再次按时可以取消,介绍了“//”当然不能忘记“/*”和“*/”。
    2、Ctrl+Shift+/ 添加块状注释
    当然我们可以使用Ctrl+Shift+\来取消上面的注释
    如果我们想把语句左移和右移应该怎么做呢--〉首先选择相应的语句--〉然后按Shift+Tab就可以实现左移,但是如有要右移呢,我们可以这样做:--〉选择需要操作的语句--〉右击--〉点击Source--〉点击Shift Right。


  • 作者:Sur

    题目:【MSP430 编译器使用经验】+CCS 之排版功能

    对于程序员来说,或者对于电脑使用者来说,快捷键往往决定着工作效率的高低,一个人知道Ctrl+C和Ctrl+V的人的工作效率肯定要比只知道右击-〉复制-〉右击-〉粘贴的人要高。下面来为大家介绍下CCS中的一个非常实用的快捷键。那就是ctrl+shift+F。

    应用情景:大家有没有遇到,使用CCS时代码界面很乱的时候啊,这个时候大家都怎么弄的呢,是一行行对其还是快捷键呢。
    下面我们来为大家介绍下CCS 5中类似visual c++的Alt+F8快速排版、对齐的功能
    那就是Ctrl+A来全选,然后右击——〉进入Source子菜单--〉Format,里面还有更多的功能。