X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
[经验] 【MSP430 编译器使用经验】用IAR建立自己的代码大厦
sjtitr
2014-8-3 07:57
楼主
俗话说——万丈高楼平地起,用腻了别人提供示例工程,所以今天我们就来从无到有地建立一个自己的工程,这不只是工程的问题,更要紧的是,
搭建自己的软件平台,以便于之后,随时利用这平台迅速运行起各种机能
。 整个工程的压缩包已经附在本文后面了,有需要的童鞋尽管拿去用,本代码允许被指摘、被学习、被利用甚至做成产品被出售,请保留相关注释信息就好。代码不是本文的核心内容,本文其实重在建立工程,建立自己的运行环境,代码只是一种辅助工具。 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秒的周期闪烁,利用按键来切换闪烁模式:红灯闪、绿灯闪、双闪。 为了支持基本的机能,我的平台需要有基本的事件的处理,所以利用事件来调度处理过程——
while(1)
{
if(spf_get_call(&call))
{
if(proc_array[call.pid] != NULL)
{
proc_array[call.pid](call.arg);
}
}
}
再加上有时间的问题,所以我们暂且利用看门狗作为系统tick计时器(正经场合还是用看门狗复位比较安全,俺在此抛砖引玉了),每隔8ms产生一次tick
void timer_init(void)
{
IE1 |= WDTIE;
WDTCTL = WDT_MDLY_8;
}
把这个tick作为基准,用于其他处理需要的时间——LED闪烁需要定时,Key检测需要定时——把定时机制作为一个PROC,登记在splatform中。
u8_t spf_timer_proc(arg_t arg)
{
switch(arg)
{
case PROC_INIT:
{
u8_t i;
for(i = 0; i < PROC_MAX_COUNT; i++)
{
timer_array[i].handler = NULL;
}
}
timer_init();
break;
case TIMER_TICK:
{
u8_t i;
for(i = 0; i < PROC_MAX_COUNT; i++)
{
if(timer_array[i].handler)
{
if(timer_array[i].timeout)
{
timer_array[i].timeout--;
}
else
{
timeout_handler handler = timer_array[i].handler;
if(timer_array[i].interval)
{
timer_array[i].timeout = timer_array[i].interval;
}
else
{
timer_array[i].handler = NULL;
}
handler();
}
}
}
}
break;
default:
break;
}
return TRUE;
}
以上就是所谓软件平台大致的思路了,详细内容请参考示例的代码。 最后利用平台来实现预定的机能:
/*******************************************************************************
* 段 落: Led控制处理
* 描 述: 主要管理Led的blink模式
*******************************************************************************/
#define LED_ARG_SWITCH 0x02
static u8_t led_arg = 0x01;
void led_timeout(void)
{
P1OUT ^= led_arg;
}
u8_t led_proc(arg_t arg)
{
switch(arg)
{
case PROC_INIT:
{
P1DIR |= 0x41;
P1OUT &= ~0x41;
set_timer(PROC_LED, 125, led_timeout, CYCLE);
}
break;
case LED_ARG_SWITCH:
{
P1OUT &= ~0x41;
switch(led_arg)
{
case 0x01:
led_arg = 0x40;
break;
case 0x40:
led_arg = 0x41;
break;
case 0x41:
default:
led_arg = 0x01;
break;
}
}
break;
default:
break;
}
return TRUE;
}
/*******************************************************************************
* 段 落: Key扫描
* 描 述: 主要进行按键扫描检测
*******************************************************************************/
void key_scan(void)
{
static u8_t keyRecord = 0x0A;
keyRecord = (keyRecord << 1) | ((P1IN & 0x08) ? 1 : 0);
if((keyRecord & 0x0F) == 0x0C)
{
spf_call_proc(PROC_LED, LED_ARG_SWITCH);
}
}
u8_t key_proc(arg_t arg)
{
if(arg == PROC_INIT)
{
P1DIR &= ~0x08;
P1REN |= 0x08;
P1OUT |= 0x08;
set_timer(PROC_KEY, 3, key_scan, CYCLE);
}
return TRUE;
}
编译成功以后,我们进行板子相关设置——首先根据前文的说法打开工程选项:第一个把通用设置中的芯片型号选择正确!
接下来在调试选项中,选择FET调试器
当然了,在FET具体设置里,也要选择正确是哪一个调试器——USB型的,你也是吧?
原则上只要红框位置选择正确了,其他的也都是正确的,如果不放心,就逐个对照一下看看。 最后下图,右面第二个是下载并进入调试模式,右面第一个是不下载只进入调试模式。所以下载调试,运行吧!
右面第三个红色圆圆的按钮是什么?设置断点,有了今天的工程做基础,断点这部分,我们下次详聊。 OK,关于小灯闪烁我就不上图片视频了,有兴趣的童鞋自己烧写运行试试。 关于代码和逻辑,不在本文讨论范围内,不过有意了解详情的童鞋们可以跟帖提问,我会尽力答复的。 最后面是代码:
spf.rar
(140.78 KB)
(下载次数: 24, 2014-8-3 07:47 上传)
本帖最后由 sjtitr 于 2014-8-3 08:00 编辑
点赞
回复评论 (1)
沙发
Bingqi23
好熟悉的代码啊
我也要玩
点赞
2015-11-20 12:38
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
网上发现在UCOSII中方注释,不错拿出共享
4~20mA 恒流源 运放 损坏
学知识,赢好礼|泰克半导体材料与器件测试技术电源特性篇!
EEWORLD大学堂----TI 机器人系统学习套件(TI-RSLK)升级版
求stm32的USB源码
keil 编译
跪求MSP430F425 封装库。
iar编译430问题
CPLD驱动MAX7219的问题
在拥挤的车上,如何对待踩脚与被踩?
电子产业中的绿色设计
好久没来了,报道下,各位还好吗?
错误,使用MPLAB IDE编译程序时出现的错误
求大神帮我看下这个电路是否正确?
USB mass storage 的一点疑问
为什么离开仿真器就死机?
PC从51单片机接收高速采样数据,求教通过USB接口完成通信的可行方法
1.闪烁灯
精确的峰值--谷值检测器
STlink 盗版成功!
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复