搜索
bottom↓
回复: 56

想开始用NEC单片机了,求一IAR的例程!【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-26 09:37:03 | 显示全部楼层 |阅读模式
最近开始新项目,打算尝试用78k0/kf2来做,用IAR做环境,哪位有例程或者程序框架给我一个吧,主要是想看看编译环境设置和都需要哪些包含文件,先谢谢了。

出0入0汤圆

发表于 2008-12-26 10:07:37 | 显示全部楼层
用 APPLITE2生成一个 不就OK了

出0入0汤圆

 楼主| 发表于 2008-12-26 10:13:02 | 显示全部楼层
不明白?

出0入0汤圆

 楼主| 发表于 2008-12-26 13:32:40 | 显示全部楼层
哪位大侠从此飘过时,伸一下援助之手吧

出0入0汤圆

 楼主| 发表于 2008-12-26 14:16:17 | 显示全部楼层
yewuyi给我传一个吧,我知道您一定是用的呀。yunxin0317@163.com

出0入0汤圆

发表于 2008-12-26 15:54:21 | 显示全部楼层
    懒人,自己不知道可以在网上查!! ~~~~~

出0入0汤圆

发表于 2008-12-26 15:55:24 | 显示全部楼层
APPLILET2 FOR V850

出0入0汤圆

发表于 2008-12-26 17:04:20 | 显示全部楼层
applilet2_78k0_kx2_v230

出0入0汤圆

 楼主| 发表于 2008-12-26 17:27:13 | 显示全部楼层
谢谢LS,可是我想要的是IAR的例程,applilet2_78k0_kx2_v210 也可以吗

出0入0汤圆

发表于 2008-12-27 21:20:14 | 显示全部楼层
点击此处下载 ourdev_561764.rar(文件大小:15K) (原文件名:IAR_9234.rar) 

出0入0汤圆

 楼主| 发表于 2008-12-29 08:41:29 | 显示全部楼层
谢谢各位!

出0入0汤圆

发表于 2008-12-29 09:29:06 | 显示全部楼层
刚看见帖子,给你一个NEC78F9222的,尽量不要改IAR的DEBUG模式下各项设置,如果要RELEASE模式的,参照DEBUG设置改就可以了。



点击此处下载 ourdev_563323.rar(文件大小:20K) (原文件名:DEMO FOR NEC78F9222.rar) 

出0入0汤圆

发表于 2008-12-29 12:12:16 | 显示全部楼层
谢谢yewuyi兄!



我刚刚下载来看一下,Debug和Release模式,只有 Stack/Heap 这个选项里面有所不同?



Debug里面, Near 设置是 0



Release里面,Near 设置是 512



这个设置是根据什么得来的呢??RAM吗??但看规格书上,9222的RAM是256Byte的呀

出0入0汤圆

发表于 2008-12-29 12:21:26 | 显示全部楼层
再下载 GZ_NEC 兄提供的例子



9234的,在Debug和Release模式下,设置都是一样





Near设置是 256



Far 是 4096,这个是不可更改的,这个是指FLASH的大小吗?但9234是 8KByte 的Flash啊

出0入0汤圆

 楼主| 发表于 2008-12-29 15:17:56 | 显示全部楼层
谢谢yewuyi兄!例子非常好,我用78f0537时编译出现



Error[e16]: Segment CODE (size: 0xb2c7 align: 0) is too long for segment definition. At least 0x4640 more bytes needed. The problem occurred while processing the segment  

placement command "-Z(CODE)CODE=02BA-7FFF", where at the moment of placement the available memory ranges were "CODE:1379-7fff" 

   Reserved ranges relevant to this placement: 



不知大家是否遇到过,是哪方面的问题呢

出0入0汤圆

发表于 2008-12-29 16:01:31 | 显示全部楼层
回13楼



这要从数据存储说起,我们在IAR下NEC程序使用的变量大体可以分为3种:



1. 临时局部变量,主要存放位置在STACK上

2. 全局变量和局部静态变量,这些变量占全局变量的位置和尺寸

3. C++的new或C语言malloc所申请的内存,这是放在heap的



单片机的RAM大体可以分为这3段,每段可以在细分



而在92xx单片机上,RAM本来就少,很少使用new和malloc, 如果没有使用,那没heap数据段就不会产生,那没heap的尺寸也就没有了意义,所以填写什么都无所谓了

连接命令行中:HEAP+_HEAP_SIZE 段是没什么意义的



-Z(DATA)NEAR_I,NEAR_Z,NEAR_N,HEAP+_HEAP_SIZE=FE00-FE1F



那么在92xx单片机下,主要数据段就剩下了全局变量和堆栈了,即CSTACK+_CSTACK_SIZE 和全局变量了,全局变量占的位置有分NEAR_I,NEAR_Z,NEAR_N等等, 但是要保证他们之和要小于128或256



还要主要的是,如果用硬件仿真器仿真,仿真器会占用304个字节的代码和5个字节的RAM , 所以你要保证你的程序留有304的余量和5个RAM的余量

出0入0汤圆

发表于 2008-12-29 16:15:39 | 显示全部楼层
我那个例子中,RELEASE模式没改,你自己参照DEBUG模式修改一下就可以了。



yunxin0317的问题是你没看懂XCL文件,想熟练使用IAR,看懂XCL文件是必须的。





IAR下9222默认的XCL文件有一点问题,在我的压缩文件包中放了一个9222的XCL文件,那个项目编译的时候,也已经指定到了那个连接文件上,使用9222的兄弟要注意,但9234是没问题的。



一般使用8BIT的MCU,都不太可能使用到内存管理,例如内存开辟、内存释放等函数,所以HEAP是无意义的,可以直接设置为0,使用IAR要理解STACK和HEAP的区别,很多人用着C语言,但并没有完全弄清楚这两个的区别,还是自己使用GOOGLE查查资料看把。。。



至于:Far 是 4096,这个是不可更改的,这个是指FLASH的大小吗?但9234是 8KByte 的Flash啊 

这个应该是IAR根据选择CHIP的型号强制确认的,这一般和CHIP的寻址方式和寻址长度有关系,从字面上看,IAR应该在前4096使用NEAR模式编译,在后4096使用FAR模式编译,这样一般可以最大限度优化代码。

出0入0汤圆

发表于 2008-12-29 16:18:07 | 显示全部楼层
顺便奉献一个小技巧,

1. NEC单片机的代码效率和速度不怎么样,动不动就3字节的指令和6周期的速度,写个程序,没写几句就满了,这样不得采用最高优化,但是有些时序怕优化完蛋了,这样很麻烦,但是你可以有选择的处理每个函数。



#ifndef __IAR_OPTIMIZE_H__ 

#define __IAR_OPTIMIZE_H__ 



#define OPTIMIZE_SIZE_NONE    _Pragma("optimize=z none") 

#define OPTIMIZE_SIZE_LOW     _Pragma("optimize=z low") 

#define OPTIMIZE_SIZE_MEDIUM  _Pragma("optimize=z medium") 

#define OPTIMIZE_SIZE_HIGH    _Pragma("optimize=z high") 

#define OPTIMIZE_SPEED_NONE    _Pragma("optimize=s none") 

#define OPTIMIZE_SPEED_LOW     _Pragma("optimize=s low") 

#define OPTIMIZE_SPEED_MEDIUM  _Pragma("optimize=s medium") 

#define OPTIMIZE_SPEED_HIGH    _Pragma("optimize=s high") 

#endif 



假如你不想太高级优化一个函数,可以这样定义函数

OPTIMIZE_SIZE_LOW unsigned char My_fn(void)

{

}



2. 在IAR AVR下,__delay_cycles() 用的不亦乐乎,但是IAR NEC中,想用一个准确的软件延时,的确有点头痛了,我想IAR为什么没有类似__delay_cycles()的函数,可能是NEC的片子跑的太慢了,动不动就6个8个周期, 哈哈,但是不怕,本人手写了一个软件延时的,测试感觉还是比较准的:内部8MHz时钟,分辨率2us, 源代码奉上

//*

//*********************************************************************************************************

//* Function : __delay_2us(unsigned short DL)

//* Describe : 

//*            OSC = 8.000MHz 软件延时, 理论没有误差, 已经将调用和返回计算在内

//*

//*            DL 取值范围 3 - 65535. 分辨率2us, 软件延时范围: 6us - 131070us

//*

//*            例如:

//*

//*           延时10us    __delay_2us(5);

//*          

//*           延时10000us    __delay_2us(5000);

//*

//*--------------------------------------------------------------------------------------------------------

//* Author   : 

//* Date     : 

//*--------------------------------------------------------------------------------------------------------

//* Mender   :

//* Date     :

//* Describe :

//*********************************************************************************************************

//*

void __delay_2us(unsigned short Dl)

{

    // DL被AX 传递过来

    // MOVW     AX,DL               // 6T

    // CALL     __delay_us          // 6T

    asm("DECW   AX");               // 4T -- 2us

    

    asm("DECW   AX");               // 4T

    asm("NOP");                     // 2T

    asm("NOP");                     // 2T

    asm("NOP");                     // 2T

    //asm("RET");                   // 6T --2us

    

    asm("delay_2us: DECW  AX");     // 4T

    asm("CMPW   AX, #0");           // 6T

    asm("BNZ    delay_2us");        // 6T -- 2us

}



本贴被 GZ_NEC 编辑过,最后修改时间:2008-12-29,16:20:08.

出0入0汤圆

发表于 2008-12-29 16:28:33 | 显示全部楼层
GZ_NEC 讲的使用硬件仿真器必须保留一定ROM、RAM的问题,这个主要是92XX系列为了降低成本,CHIP内部没有硬件调试的电路,例如JTEG,但为了实现简单的调试,IAR使用了一个ROM MON方式,也就是要在你的程序中加入一段代码,一般就是UART相关的代码,在调试的时候把数据从MCU发给IAR,这段代码必然要占用ROM和消耗掉几个RAM ,这当然是在使用MINICUBE2这样的工具时才需要,如果使用NEC的那种可以全仿真的大家伙工具,呵呵,就没有这个限制了,但现在还有多少人用那样的东西呢?





俺不使用MINICUBE2的调试功能,呵呵,不过很惭愧的是,前段时间突然想连接耍耍,看能不能真实现调试92XX这个功能时,竟然没连接的上,找NEC问了问,也没解决得了,俺唯一的一次找NEC的FAE问事情,呵呵,竟然是无功而返,心中对NEC的技术支持是无比的失望啊。。。



看来俺有空的时候还是要耍耍,查查到底为什么没连的上,如果那位仁兄知道也可以讲几句,呵呵,就当帮我省点事情好了。。。

出0入0汤圆

发表于 2008-12-29 16:38:02 | 显示全部楼层
TO  LS:

1、想分别优化的话,个人建议最好还是直接写PRAGMA,呵呵,OPTIMIZE_SIZE_LOW unsigned char My_fn(void) 是个技巧,但不算规范。



2、俺基本用不到delay这个东西,也建议大家少使用这个东西



3、分别优化还有一个办法,那就是单独生成一个*.C文件,选择编译优化等级也是可以的



4、俺还没遇到多少珍贵的时序会被优化干扰,俺印象中也没见到什么这样的例子,所以,俺的选择历来都直接是9级最高优化。



5、GZ_NEC 看来用IAR FOR NEC有一段时间了,呵呵,用NEC的人很少,用IAR FOR NEC的人就更少了,幸会幸会。。。

出0入0汤圆

 楼主| 发表于 2008-12-29 16:42:48 | 显示全部楼层
我用的是默认的链接文件lnk78f0537_64.xcl,我没有修改,但是报错



Error[e16]: Segment CODE (size: 0xb2c7 align: 0) is too long for segment definition. At least 0x4640 more bytes needed. The problem occurred while processing the segment   

placement command "-Z(CODE)CODE=02BA-7FFF", where at the moment of placement the available memory ranges were "CODE:1379-7fff"  

   Reserved ranges relevant to this placement: 



有什么解决办法吗?

出0入0汤圆

 楼主| 发表于 2008-12-29 16:53:31 | 显示全部楼层
我看了一下链接文件,bank区都是对应的BCODE,而CODE=02BA-7FFF应该是对应的我的程序段,请问yewuyi怎样才能把BCODE也用上呢,难道要在每个程序后面都加属性吗,这也太麻烦了

不知道我理解的对不对?

出0入0汤圆

发表于 2008-12-29 16:58:47 | 显示全部楼层
呵呵 #PRAGMA编译器控制指令和俺写的OPTIMIZE_SIZE_LOW 是等效的,只是标示方法不一样, 只是把它细分到函数级别,文件也可以使用不同优化级别



我算胆子大的人了,从拿到NEC的仿真器,到出样品机给客户确认,也就2周,PCB还是加急的,现在正在准备批量生产呢....说实话心里有点怕怕的,说实话,要是出问题了,那可不只是几千只单片机的问题了, 各个环节都要完蛋



我只对NEC的9202,9212,9222,9234感兴趣,其他没兴趣,其他的也不感冒, 也没用过,也不想用, NEC的这几款片子,功能没AVR多,性价比没AVR好,就是便宜



LS的不喜欢软件延时,俺喜欢,我在9202上实现模拟双串口,9600 全双工收发,硬件定时有局限性,因为NEC指令慢,硬件延时偏差大,用软件延时很准,可以说是数着指令干活的

出0入0汤圆

发表于 2008-12-29 17:06:25 | 显示全部楼层
楼主的上面的问题,跟XCL没关系,上面提示CODE段长度是0xb2c7, 即:45K的程序量, 用的片子好像是32K的,肯定装不到芯片里面,还是看看其他设置吧,为什么会产生这么大的代码

出0入0汤圆

发表于 2008-12-29 17:18:24 | 显示全部楼层
你首先要确定BCODE段是否需要可以装代码,NEC是采用的统一编址的方式,呵呵,那一段未必就一定可以装CODE。。。



如果你确定可以装CODE,那换需要知道BCODE是做什么的,你现在大约用了多少,可以通过修改XCL文件的方式,合并出一段更大的CODE段来装下你的程序。

出0入0汤圆

 楼主| 发表于 2008-12-29 17:31:23 | 显示全部楼层
我用的537有一段基本存储器32k,还有6段扩展的flash,一共128k

出0入0汤圆

发表于 2008-12-29 18:50:15 | 显示全部楼层
谢谢 GZ_NEC 兄和  yewuyi 兄!!!



学习到了很多关于内存定位的问题,豁然开朗的感觉呀!!



对于优化, yewuyi 兄有什么好方法吗??在IAR For AVR中,如果直接用最高优化,(不使用variable 和 __delay_cyclesd)这样编译出来的程序很容易出问题,在IAR For NEC 78K中,您是怎么去避免这样过度优化的问题的呢?



另外,就一般使用而言,NEC的Bank之类定义需要去理会吗??我现在手头上有 0503、0513、0535之类的片,RAM和ROM相对大一些,在使用上需要注意什么吗??



我在IAR For NEC 4.60A EV 版本里看到的XCL还是错误的,这些BUG怎么也不改一下,看来IAR对NEC也不怎么重视啊

出0入0汤圆

发表于 2008-12-29 20:03:59 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2008-12-30 08:47:58 | 显示全部楼层
才把链接文件改了改,居然编译通过了,当然了,还是不明就里 

出0入0汤圆

发表于 2008-12-30 14:06:55 | 显示全部楼层
1、variable和static只有在需要用的时候才应该用,呵呵,随便用那肯定不对了啊,这个和优化没关系。

2、俺基本不使用delay这样的东西。

出0入0汤圆

发表于 2009-3-1 09:36:45 | 显示全部楼层
在程序中用P3.1 = 1;会有错,然后我改为P3^1 = 1;P3_1 = 1;还是会有出错报告,只能用P3 = 0x02;不能单个位操作吗?

出0入4汤圆

发表于 2009-3-1 12:25:26 | 显示全部楼层
上面几只牛在炫呢,咱也上点:

IARfor78K_460A\lnk文件补丁,直接覆盖78K目录.rarourdev_422806.rar(文件大小:5K) (原文件名:lnk文件补丁,直接覆盖78K目录.rar)

k0s中有几个的lnk文件看起来是写错了,直接覆盖ok

出0入0汤圆

发表于 2009-4-10 15:56:51 | 显示全部楼层
用P3_bit.no1=1; 就可以了

出0入0汤圆

发表于 2009-4-21 16:23:55 | 显示全部楼层
学习了。真经典

出0入0汤圆

发表于 2009-8-13 09:39:33 | 显示全部楼层
yunxin0317  你那问题怎么解决的啊,能不能告诉我!

出0入0汤圆

发表于 2009-8-24 22:39:49 | 显示全部楼层
ap000102 :   你连芯片头文件都没看就开始写程序啦,,,, ?  牛

出0入0汤圆

发表于 2009-12-12 09:41:00 | 显示全部楼层
谢谢各位

出0入0汤圆

发表于 2010-6-6 16:26:01 | 显示全部楼层
学习中,IAR对生手来说太难用

出0入0汤圆

发表于 2010-7-30 17:58:29 | 显示全部楼层
有一点!!!!!!!

出0入0汤圆

发表于 2010-8-15 17:48:24 | 显示全部楼层
呵呵,我昨天开始用IAR for nec代替PM+,就发现 Error[e16]: Segment CODE...,现在终于解决了问题。多谢各位!!!

出0入0汤圆

发表于 2010-8-15 17:54:14 | 显示全部楼层
IAR还是好用的,最大优势在于编译效率高。从我用过的 for ARM、for AVR,再到此次的 for NEC,均证明其编译的代码最紧凑、最小。IC公司本身的编译器,真是差太多。

出0入0汤圆

发表于 2010-10-23 15:59:23 | 显示全部楼层
大家说的都很好!鼓掌...

出0入0汤圆

发表于 2010-10-23 16:01:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-16 00:26:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-30 15:02:08 | 显示全部楼层
谢谢各位,学习了解中

出0入0汤圆

发表于 2010-12-27 09:25:12 | 显示全部楼层
学习,谢谢

出0入0汤圆

发表于 2011-6-10 14:13:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-16 15:16:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-17 15:18:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-19 20:18:05 | 显示全部楼层
回复【45楼】jason_77chen
-----------------------------------------------------------------------

mark。。。。。。。。。。。

出0入0汤圆

发表于 2011-9-2 17:23:50 | 显示全部楼层
这个NEC怎么就那么复杂了,鬼火
有没有谁帮忙写一个最简单的定时中断程序,用IAR4.50的,IC 9212

出0入0汤圆

发表于 2011-9-27 13:43:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-22 15:37:53 | 显示全部楼层
看各位大侠的帖子,好像NEC入手很复杂啊,埋头继续看资料

出0入0汤圆

发表于 2012-8-18 00:44:38 | 显示全部楼层
谁有v850的例程 发一下啊

出0入0汤圆

发表于 2012-9-29 11:02:47 | 显示全部楼层
楼主为什么不用PM plus 呢,需要的话我这里有。

出0入0汤圆

发表于 2013-6-30 22:49:18 | 显示全部楼层
IAR还是无法编译,不知道是什么情况。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 08:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表