外拓的重要性

2024-04-18

外拓的重要性(精选8篇)

篇1:外拓的重要性

杨拓(1971—), 生于黑龙江省讷河。1992年迁居边境城市绥芬河。1995年与诗人杨勇创办大型民刊《东北亚》。现居北京。一场雪就这样落下来 有人敲门 雪使大地白茫茫一片 伊兹拉—庞德站在 格罗捷阔沃浮光


一场雪就这样落下来

说 还是不说 雪

都会落下来 尤其在

北方 你的一场梦境里

相互追逐着 一代代

忘记着 似乎这才是我们的责任

城里的雪孕育更多的机会

来来往往的机动车

改变着速度 雪的物理变化

映照着车身与他人的脸

只有在生活中扭曲

对生活才能有更多的理解

就象这被反复辗压的雪

石板一样立起来 如碑

行人的你不能不抬头望一望

然后低头 想起着什么

那年在乡下 也是在一场

这样的雪中 马拉着爬犁

邻居小王走了一夜 也未能

走出这样的一场大雪

愈走愈白的道路中

小王的四肢却走成了黑色

十多年啦这样的记忆

只有在北方才能更加深刻

似乎只有在北方 这样的

记忆才能诞生

说 还是不说 这场雪

就这样落下来了 让我想到了

乡村或者乡村以外的事物

是否还会有这样类似的事情发生

缘于这场雪


有人敲门

那敲门的人总是在午夜擂响四壁

空空的声音瞎掉一百双眼睛

敲门的人在门里

一百颗心房太阳下闪光

那只土拔鼠它一眨眼睛

春天就绿到了墙角

金属抖落的四肢

日子锈在门槛上

敲门的人比黑暗更黑

它一擂响静谧

我们总能听到死亡的尖叫

有人从五楼步下眩楼


雪使大地白茫茫一片

雪使大地白茫茫一片

神经元似的榆树

我看见一棵

我又看见一棵

我看见了数百棵

甚至更多

一辆红色的大客车

从它们中间穿过


伊兹拉—庞德站在

詹姆斯—乔伊斯幕前

一九六七年诗人伊兹拉—庞德站在

瑞士苏黎世的詹姆斯—乔伊斯墓前

似乎在自言自语,或者

什么也未说。插入衣兜的左手

一次次伸进又抽出,懒散的下午

在无言的松树荫下闪烁。一只蜻蜓

也躲向了远方,蝈蝈收起了长号

绿色匆匆抵向另一个春天。太多的光芒

我们都看不见什么,你写着日记

你曾在给我的一封信中说∶

“哥们儿(用不着亲爱的),我想念你。”

然后,你弯起了左臂,目光投向我。这样

就一直这样,直到你在我的目光中消失

是什么在你的双耳间响起?

我们何时还相聚?我们恭候你的邀请

老伙计,关于文学,我们还能说些什么?

看来没有机会了,你和我一样

无论是你的《尤利西斯》还是我的《诗章》

也许,可能、差不多、大概吧

(尽管我不喜欢这含含糊糊的汉语虚词)

相信一百年后我们的孩子

就象那二郎腿上的油光发亮的皮鞋

而今我拄起了手杖,太多的遗忘

我总是想起你,想起台灯

你的视镜,你视镜后的一双眼睛

整个白天我们都看不见你

面对夜晚,我更喜欢白天里睡觉,象猫头鹰

让早晨从中午开始,让坚定的意志

从我的血液里喷出。哦,那一个个日子

来了又走了走过又来了

让我们一遍遍地在大象中看清

你将依然会发现我与你肩并着肩

虽然烦恼的小花还在一朵朵盛开

在巴黎抑或别的什么地方


格罗捷阔沃浮光

车站的广场 流火在蒸馏

脊前与额头的汗水 忘记了流向

餐饱了纸屑酒瓶的垃圾箱静候

你的再一次光临

你的再一次光临意味着什么?

奔跑的太阳拾回昨夜丢失的影子

是谁的目光 不声不响地发芽

大摇大摆的鸽子穿梭于嬉戏中的狗群

白杨树下的冷荫

河东的谷子摇身三变 肉色的面包

河西的坦克驶进了废铁收购场

木制天桥在时光的颤悠中变薄

它的下面就是火车奔驰的吼叫

左侧 雨水涮过的大街 板制小屋

敞开的哥特式窗口 歌曲在飞翔

一个民族的翅膀是升起还是落下

西风涌荡的市场 摊主湿漉漉的吆喝∶

“三个黄瓜一千卢布”

元音与辅音一片火光

火光熊熊戈比流行的年代已是星星点灯

不远处的墓地 太阳照着依旧照着

社会主义的肌肉与前苏联的骨头

英雄与姓氏,异国与它乡、蚂蚁及我

谁是真实的。目光与目光是光

光的目地在于∶它正濡染我

尚未到达你

篇2:外拓的重要性

【课程收益】课程通过分析目前金融市场变化以及邮政金融业务发展现状,剖析邮政发展面临的困境,明确转型的必要性,探索邮政金融可持续发展的规律。并基于对转型模型整体框架的描述,帮助学员理解并掌握转型是什么以及转型内容。最终导出金融业务转型过程中需要达成的短中长期目标、达成这些目标的具体实施方案以及实施步骤。

【课程大纲】

(一)2014年金融市场分析 1.1市场环境变化 1.1.1多元化产品创新 a)累进型创新 b)扩展型创新 c)战略型创新 1.1.2新竞争对手出现 a)民营银行 b)互联网金融 1.1.3利率市场化

1.1.4新兴渠道——“4A”理念的金融服务 1.2竞争对手的行动——社区银行 1.2.1国外成功案例 1.2.2国内社区银行实践 1.2.3打造智能化的体验中心 1.3客户需求的变化

(二)2014年邮政金融业务发展策略 2.1邮政金融网点发展定位 2.2社区银行网点的思路参考 2.2.1加强信息收集与客群分析 2.2.2改进营销方式 2.2.3丰富服务渠道 2.2.4创新金融产品 2.2.5优化业务流程 2.3差异化网点经营策略 2.3.1客户经营策略 2.3.2网点经营策略

2.3.3差异化策略下网点经营流程

【课程二】业务推动督导体系建设(1天)

【课程收益】课程重点讲解业务发展过程中业务推动、督导追踪的工作,通过掌握这些方面的工作方法来切实实现相关业务的有效推动。【课程大纲】

(一)业务推动督导体系概述(二)业务统计与数据分析 2.1活动量与业务量数据追踪 2.1.1业务量数据 2.1.2客户经营数据 2.2数据分析方法

2.3数据分析运用(实际案例示范)(三)信息反馈

3.1什么是有效的信息反馈 3.2信息反馈的常见做法 3.3信息反馈的工具解析 3.3.1视频 3.3.2图片 3.3.3短信 3.3.4案例 3.3.5工作简报(四)常态化督导 4.1督导形式 4.1.1现场督导 4.1.2非现场督导 4.2督导内容 4.2.1数据追踪 4.2.2事件追踪 4.2.3活动追踪 4.2.4各岗位督导点参考 4.3督导频次 4.4会议体系

【课程三】旺季营销实务解析(1天)

【课程收益】通过对旺季营销的业务达成逻辑的解析,从内挖外拓的经营方式、营销企划的推动动作着手,帮助受训人员理解并掌握旺季营销相关实务操作。【课程大纲】

(一)旺季营销下的业务达成逻辑 1.1网点生产力提升模型 1.1.1网点经营 1.1.2管理推动 1.2网点经营两大体系 1.2.1客户经营体系 1.2.2网点管理体系(二)内挖外拓

2.1邮政代理金融主要客户群分析 2.1.1外来务工 2.1.2个体商户 2.1.3上班白领 2.1.4社区居民 2.1.5农村居民 2.2“内挖” 2.2.1内挖的定义 2.2.2内挖的策略 a)产品策略 b)服务策略

2.2.3内挖流程——存量客户五轮次盘活法 2.3“外拓” 2.3.1外拓的定义 2.3.2外拓的策略 2.3.3外拓流程(三)企划工作 3.1客户活动

3.1.1活动策划的意义

篇3:外拓心得

此次培训,我获得最大的收获是在客户交流中角色的转变。之前,面对新客户时,我更多的扮演“推销员”的角色,见客户交就是直接推销我行贷款、理财、保函、信用证等产品。而大多客户对推销人员都持排斥态度,所以如果客户对我说对我行产品无需求,而我往往就不了了之了。但是市场在变,时代在变,我们中国银行作为国家金融系统最为重要的成员之一,我们中行客户经理拓展市场的手段定然不能淹没于走马观花似的推销之中

“聆听客户、分析客户、伺机切入”是我们需要做的事情。实战培训中,我们小分队在拜访广怀集团的大门前,面对守卫森严的安保措施,我下意识先想到的就是直接简单的推销模式:“我们是中国银行的,希望拜访公司负责人谈下合作的事。”但是培训老师却说:“先不急,先了解客户情况不迟”。随后我们就在周边询问公司外出办事人员侧面了解公司情况以及公司负责人情况,没想到这些信息帮助我们实现了重要的一步——成功踏入了企业大门并面见了公司董事长。

这一点从侧面说明了搜集并分析客户情况的重要性。在面对广怀集团负责人的时候,我们也是更多的聆听客户介绍公司情况,并予以认可和赞扬。因此,客户向我们透露了较多的信息,我们默默记下并进行关注。这次拜访中,在没有明确需求点的情况下,我们并没有立即推荐我行具体产品,因为那样客户马上就会给出我们见面以来第一个“NO!”。但我们在客户面前建立了良好的第一印象,并建立了联系。

通过这个案例,我认识到营销是一个持续的过程,营销的过程是需要在建立联系后持续的引导和感化客户。与推销相比,我认为营销才是适合我们银行客户经理的市场拓展方式。

公司客户经理营销外拓培训心得体会

(二):细节决定成败

高新支行 周涛

为期一周的公司客户经理营销外拓培训拉下帷幕,虽然时间不长,但是却收获颇多,受益匪浅。作为公司客户经理队伍的一名新手,我通过这次和同事一起外拓营销学习到很多。

在市场竞争日趋激烈的今天,我们首先应该做的是倾听,聆听客户的发展思路和对我们银行的需求,然后站在客户的角度思考他们到底想了解的具体是哪些信息,然后根据客户提供的信息寻找我行匹配的产品,这就要求我必须对我行的产品有全面的了解。

这次外拓培训的第一天我就发现了自己在产品了解方面的不足。当时我和客户经理陈家均、汪涛一组一起去陌生拜访一位新客户,刚开始是公司财务负责人接待的我们。在交谈过程中,如果客户问到我比较熟悉的贷款业务时,我还可以比较自信地回答,但由于客户目前在其他银行有授信,所以兴趣并不是很大。

在我感觉这次营销就要这样结束的时候,陈家均突然向客户问了一句:“你们公司目前有上市的打算吗?我们银行现在有专业的团队可以帮助企业上市”。

客户听了以后就比较感兴趣,向我们询问了很多信息。这时,企业老板李总在办公室里听到我们的谈话后也走出来和我们一起交流。在这过程中,李总侃侃而谈,表达了公司想上市的需求以及自己的看法。陈家均也凭自己对新三板产品的了解说服了客户,赢得了客户的认同,敲定了下次进一步沟通合作事宜的时间。

从公司出来以后,我最深的感触是:还好今天有前辈在,如果我单独一个人来,这个潜在客户可能就发现不了了。

俗话说:细节决定成败,任何一个微小的失误都可能决定成败。所以,我们在工作中要注重细节,善于抓住细节。营销中客户不经意中提到的信息可能就是他们最真实的想法,我们如果能善于抓住客户所提供的信息,从细节入手,了解客户的需求,定能打开一片天地。

这次培训我也收获良多,我相信通过不断地学习以及实践,我一定能够突破自我,在新的工作领域也能开拓一片天地!

为期一周的信用社外拓拉下帷幕,虽然时间不长,但是却收获颇多,受益匪浅。作为公司客户经理队伍的一名新

手,我通过这次和同事一起外拓营销学习到很多。

在市场竞争日趋激烈的今天,我们首先应该做的是倾听,聆听客户的发展思路和对我们银行的需求,然后站在客户的角度思考他们到底想了解的具体是哪些信息,然后根据客户提供的信息寻找我行匹配的产品,这就要求我必须对我行的产品有全面的了解。

在这次外拓培训的第一天我就发现了自己在产品了解方面的不足。当时我和客户经理陈家均、汪涛一组一起去陌生拜访一位新客户,刚开始是公司财务负责人接待的我们。在交谈过程中,如果客户问到我比较熟悉的贷款业务时,我还可以比较自信地回答,但由于客户目前在其他银行有授信,所以兴趣并不是很大。

在我感觉这次营销就要这样结束的时候,陈家均突然向客户问了一句:“你们公司目前有上市的打算吗?我们银行现在有专业的团队可以帮助企业上市”。

客户听了以后就比较感兴趣,向我们询问了很多信息。这时,企业老板李总在办公室里听到我们的谈话后也走出来和我们一起交流。在这过程中,李总侃侃而谈,表达了公司想上市的需求以及自己的看法。陈家均也凭自己对新三板产品的了解说服了客户,赢得了客户的认同,敲定了下次进一步沟通合作事宜的时间。

从公司出来以后,我最深的感触是:还好今天有前辈在,如果我单独一个人来,这个潜在客户可能就发现不了了。

俗话说:细节决定成败,任何一个微小的失误都可能决定成败。所以,我们在工作中要注重细节,善于抓住细节。营销中客户不经意中提到的信息可能就是他们最真实的想法,我们如果能善于抓住客户所提供的信息,从细节入手,了解客户的需求,定能打开一片天地。

这次信用社外拓我也收获良多,我相信通过不断地学习以及实践,我一定能够突破自我,在新的工作领域也能开拓一片天地!

围绕“走出去、领进来、留得住”培训主题,我有几点深刻感触:

“走出去”,积极主动。临柜的我,更多的是在柜台被动地等客户咨询。而培训,使我转变理念,实现了由“等客上门”到“上门找客”的转变。说实话,开始的我畏难心理严重,胆怯、不自信、不敢、不愿,每走访一位客户都是自己内心的挣扎。而经过实践培训后,我越来越自信大方,问老板好,主动寒暄,捕捉客户关注点,适机介绍我们的产品和服务,终于不那么紧张,能够逐步控制场面了。

“领进来”,有效营销。怎么才能把客户领进来,这时我们需要掌握有效的营销方式,让客户愿意进来,并且有机会让更多的客户也进来。如老师所说的“FABE”销售法则,从解答客户诉求,巧妙地处理好客户关心的问题,顺利实现产品的销售诉求。运用顾问式营销方法,处理客户异议等情景应对方式,找准核心关键点,学会询问和聆听。同时,更应该熟知我们的产品和服务,增加社会阅历,加强学习营销技能的同时加强学习业务知识,才有资本和机会去把潜在客户的显性、隐性需求发掘,并把他们“领进来”。

篇4:外拓话术

外拓必备资料:宣传折页、名片、笔记本、笔、适量的零钞、小礼品等。

一、外拓新增客户——易沟通客户

我们:老板您好,打扰您了,我们是**农商银行的,就是咱们附近xx路上的那个银行(可用标志性的方位提示客户网点位置,增强信任感),我是那边的行长,信贷员***,大堂经理***,这是我的名片。(双手递送给客户)。

基本客户的反映会是:怎么了,有什么事?

我们:是这样的,我们主要是想给您做个金融知识宣传,因为咱们农商银行正在大力扶持向您这样的小微客户,专门推出了一些针对咱们商户的政策和服务,您的店做的这么好一定也没少做营销吧?今天我们过来就是看看有什么可以帮到您的,趁这个机会咱们也互相认识一下,这是送您的一个小礼品,希望以后咱们可以多合作。(如果判断客户有一定的价值可以先送上一份小礼品)。

客户基本的反映会是:听懂你表达的意思了,会礼貌性的让你坐下,或者表情说明让你继续说下去。

我们:老板太客气了,谢谢老板。寒暄:老板是哪里人啊?这个店开几年了?怎么称呼您啊?方便给个名片(或联系方式)吗?做生意也辛苦啊!

我们:(产品服务切入)对了老板有没有去过我们农商银行啊? 客户:去过

我们:怎么样啊,给我们提提建议,看我们哪方面还可以继续改进。客户认为挺好——感谢您对我们的支持。客户反馈了意见——谢谢您的宝贵意见,我们后期一定加强。

我们:最近生意挺好的吧?咋们平时进货是现金多还是转账多啊?

客户:现金转账多

我们:那您平时转账都是去网点吗,有没有我们的手机银行和网银呢?没有电子银行产品的那太不方便了,您这样每次转账都大老远跑过去,多累啊,赶上人多还要排很长时间,更重要的是您要是跨行转账还得收您的手续费多不划算啊。正好我们现在搞活动,针对像您这样一直支持我们工作的,我们可以免费送您一套手机银行、网银,随时随地转账,跨行跨地区都不收任何手续费,因为数量也不多您看要不现在就给您预约一个?

客户:好的。

我们:明天请您带上身份证和卡去网点直接找我就可以,祝您生意兴隆!

(手机银行转账多)

篇5:外拓说辞

(1)销售员:某某先生/女士,您好!打扰您一下,我这边是湖头大桥旁的一个楼盘,叫锦绣新华都。我是楼盘销售员某某某,今天我们出来是做宣传推广的,请问您之前听说过我们这个楼盘吗?

(2)客户:没听说过(或听说过啊,就在桥头那边啊,知道)

()销售员:好的,那这样我在跟你说一下情况吧。我们小区的话就在湖头大桥旁的江滨大道边上,售楼中心就在桥头往安溪县城方向过去30米,有一个叫锦绣新华都销售中心的就是了。小区占地82亩,建筑面积13万平米,一期已经销售完,二期正在预约。不知道您到我们售楼中心去看过没有呢?(4)客户:没有啊,都还没有时间去看看啊

(5)销售员:那我在跟您说下小区的大体情况吧!我们小区总共有三期,一期已经售罄,二期正在预约,三期还未开发。目前在售的户型分楼梯房和电梯房两种,都是100—130平左右的三房,另外小区还有一个大型的新华都购物广场,预计今年的10月1号就开业了,到时候湖头镇就有自己的大型购物商场了,为了满足多样化的经营要求,小区还配有5条商业街,到时您的日常生活就更方便了!

(6)客户:那你们现在在卖的套房一平米多少钱啊?

(7)销售员:我们楼盘不一样的位置价格是有差别的,大体上是在3、4千元每平米左右。您如果有时间到我们现场看的话,我们可以帮您挑个单元具体帮您算个价,让您参考参考。

(8)客户:其实我们这里自家都有房子了,现在也还没有这方面的考虑了。(9)销售员:是啊,其实像我们一期的业主基本上也都是湖头本地的居民了,他们自家也都有房子了。但是他们之所以会买我们小区的房子,主要是买了之后相比自家的房子会有更多方面的好处:比如交通会更方便,配套会更好,而且买我们小区的房子还带城市户口呢,而且这边也是湖头的镇中心了,买了之后小孩就可以到湖头中心小学还有慈山农中接受教育了,这两所都是湖头比较好的学校了。您要是在自家的房子居住可能就享受不到这些好处了。(10)客户:说的也是啊,确实也有好处啊!

(11)销售员:对了,我们楼盘还有一个优势,就是可以办理公积金按揭贷款,不知道您有没有住房公积金呢?(12)客户:没有或有啊

(13)销售员:您有的话要是满一年了,让您如果购房了做公积金贷款的话比商业贷款可以省下很大一笔利息啊

(14)客户:是啊,但是目前还没做好买房的准备啊

(15)销售员:这样的,您可以好好考虑一下,有朋友想买房的话也可以告诉他们一下。另外,我们这边有一个登记表,您可以写下您的联系方式和地址,以后我们楼盘做活动(比如购房优惠、赠送礼品)的话,我们可以联系您或直接邮寄到您家里啊

(16)客户:做登记或客户不做(销售员不必勉强)

篇6:外拓工作总结

外拓工作总结

不知不觉中,忙忙碌碌中,已是进入深大的第三个月了,回首这三个月的学习与生活,我发现,深圳大学学生会人力资源中心,教会了我太多太多,她已成为我大学生活中不可或缺的重要组成部分,在这里,我不仅使自己得到了锻炼,能力得到提升,而且还收获了友谊,结识了许多朋友。总之,千言万语都凝聚在一句话里:HR,感谢你!

进入人力资源中心的第一项大型工作就是组织一个面向全体学生会成员的户外拓展培训活动,而我也有幸参加了这次活动的策划与组织,在这里做一下总结,为以后活动的开展积累经验。

首先,要想活动开展的顺利,就要有一份好的策划做支柱,下面就向大家介绍一下整个策划的出炉过程。在接到昊楠师兄和诗婷师姐的任务后,我们六个人开始收集游戏,然后讨论游戏的可行度,初步筛选出十个游戏,交给师兄师姐审核,剔除可行度低的三个游戏,然后我们六个人分成三组,一个小组负责三个游戏,另两个小组分别负责两个游戏和整体策划的完成,一天后,把策划书交给师兄师姐修改,这样,一份初步的策划书就出炉了。当然,后来在游戏试玩阶段针对实际情况,我们也对策划进行了数次修改,还加入了三个后备游戏,策划书基本完善。

其次,是游戏试玩阶段。我们共进行了两次游戏试玩,在试玩过程中修改游戏细则及评分标准,同时让大家熟悉游戏,以便在活动中讲解和执行。

然后,是道具准备阶段。我们在这一阶段内完成了场地和借,买道具,并于活动前去实地考察场地,搭建帐篷。

最后,就是最最让人激动的活动开展阶段了。在为时一天的户外拓展培训中,人力资源中心的全体工作人员都尽心尽力,其中,师兄师姐负责整体调度,六位机动人员则负责游戏的讲解,道具的.分发及随时回答有关游戏的各种问题,除此之外,每个部门都有两位工作人员全程跟踪,进行评判和计分,整个活动在有条不紊中进行。

在活动中,我们发扬了团结互助,分工协作,不怕吃苦,任劳任怨的精神,也加强了部门内部和部门之间的感情交流,活动总体成果斐然,也得到了主席团和其他部门的肯定。当然,美中不足的是,上午的活动由于中间休息时间过久,导致活动延期结束;有部分干事对游戏规则不熟悉,影响游戏质量;道具准备好后保管不善,不能及时拿取。这些都是需要进一步改进的地方,我们也会在以后的活动中多多注意的。

篇7:外拓注意事项

1、置业顾问/外拓专员需在派单前一天提前联系兼职人员,根据营销中心制定的工作安排表,确认好派单当天所需准备工作,包括工作时间、集合地点等工作计划。

2、现场工作分配安排:每天各负责人召集分配的学生集合进行分工和简单培训,由各区域负责人(置业顾问/外拓专员)根据工作地点合理安排发单区域并做好人员分工,确定好发单的时间(6个小时内)和地点(区域内灵活安排),确保所负责区域传单的有效发放。

3、置业顾问/外拓专员需做好外拓计划,每天提前准备好传单,做好现场传单发放监控,确保传单存放安全,按500份/人数量筹备。

4、兼职人员岗前培训:主要包括:(1)外拓安全培训:负责人需向组员说明外拓发单主要是在市区主要交通干道及商场进出口派发,需做好个人安全防范意识,保护好自己随身携带的物品,并注意遵守交通规则,避免出现一意外事故;(2)项目产品简单培训:学生需了解项目情况和产品情况;(3)带客流程培训,有意向客户学生须第一时间通知负责人去介绍和带客;(4)应对城管和相关紧急情况的处理办法;(5)当天外拓工作安排,明确好每个学生的工作时间和地点等。

6、外拓小组负责人每天做好工作总结,将当天工作情况以拍照形式记录本组工作情况,现场经理做好相关工作总结,谭红叶负责每周以周总结形式上报。

篇8:关于在美拓的简短的总结与体会

概要:

这仅仅是个人的一点心得体会与总结,本登不得大雅之堂,然而我作为一个对于手机开发完全的零起点对于其中的艰难与痛苦有着切肤的体会,这一切促使我不敢身藏浅陋将一些零星琐碎公之于众,即作为自己在美拓的简短人生经历的一个总结,如果能给后来者提供一点点地借鉴也心满意足了。

1. 关于编译环境的认识体会

首先面对程序员的就是相对复杂的编译环境及其繁琐的配置工作。高通平台分为仿真和实际的arm编译两个截然不同的编译环境,其中有些相同有些不兼容。

a)仿真编译

仿真完全使用vc6的编译机制,高通的例子是把一个个小applet编译成为dll动态库,我们的工程应该是把brew的模拟器作为静态库链接到meta的工程里面,模拟器的配置在win32/bin/brew_emu.dat中,在其中可以指定外观即devicepack配置文件,以及applet运行的文件系统路径,及其相应的mif文件所在路径。PhoneFile=H:CDMAL200Win32DevicePack1L200DevicePack1.dpk

AppletDir=H:CDMAL600-newResourceFileSystem

MIFDir=H:CDMAL600-newResourceFileSystem

Vc6能够自动解析源文件的相应的依赖关系省却了程序员写makefile的痛苦,但是如何创建vc6的工程文件是一个很繁琐的工作。

美拓的代码统统使用cfg文件管理机制可以很方便地依靠gendsp.cmd工具加入工程组,也就是说每个源代码模块都定义了一个.cfg文件,里面列明了模块的头文件.h,源文件.c/.cpp,以及链接库.lib/.a。

[IncludeFiles]

$(METAMMI)/apps/Java/jblendia_jvm/include/settings/Meta_Java_Settings.h

[SourceFiles]

$(METAMMI)/apps/Java/jblendia_jvm/port/amsui/Meta_AmsUI.c

[LinkFiles]

!ifeq($(META_TARGET),Arm)

$(METAMMI)/3Parts/JBlend/library/ajsc/ajsc_arm_ads.a

!else

$(METAMMI)/3Parts/JBlend/library/ajsc/ajsc_win32_msvc.lib

以上就是.cfg文件的格式,于是,运行win32/build目录下的gendsp.cmd就会运行一个perl的脚本gencfgmin.pl来读取metammi.cfg文件,这个文件列表了所有工程要包含的meta的模块cfg文件,然后通过这些cfg文件列明的.h,.c,.lib文件就被加入了工程,也就是加入了simulator.dsp的vc6的工程文件。

但是代码里面的include头文件是一个很麻烦的事情,首先,有些工程人员喜欢把其中的头文件名前面加上相对的路径,但是这个对于编译确实很麻烦的事情,因为编译器寻找这些路径是从一个运行的相对路径开始,然后按照编译设定的搜索路径和系统环境变量比如/include项下的路径搜索,一旦工程文件位置变动就有可能搜索不到,同时过多的设定搜索路径会减慢编译速度,因为编译器会不停在各个路径下搜索,而在系统环境变量中设置弊端更多因为有可能把不同项目的同名头文件包含进来,这才是程序员的噩梦。因此

美拓的做法是include统统使用双引号并且不带路径,并在遍历.cfg的时候把这些相应的头文件都拷贝到win32/build/include目录下,所以,你在vc6的工程里面看到的头文件在编译器看来却是在使用另外一个在build/include目录下的同名头文件,你要改动必须修改工程原路径下的重新编译才能更新拷贝,否则修改build/include下的拷贝都被覆盖掉了。

cfg机制对于非高通的meta的代码很方便,但是高通是采用一个min文件的方式来建立makefile的,添加到vc6工程就没有那么方便了,幸好不是很经常修改高通代码,因此,我们可以在simulator.dsp的源头template.dsp里面修改,就是把需要应用的高通的.c文件加到template.dsp文件里面,运行gendsp.cmd就更新了simlator.dsp。但是头文件是不能拷贝进来的,只能使用vc6的头文件搜索路径添加:ADD BASE CPP /nologo /MD /W3 /GX /O2 /I “....binstore”

这里的/I就是搜索头文件的路径,头文件的名字自然是在代码里面的了。

链接的链接库也是类似的使用# ADD LINK32 libjpeg_win32_msvc.lib /LIBPATH:“....SourceMeta3PartsJBlendlibrarylibjpeglib”

其中的/LIBPATH就是指示编译器搜索库的路径。

因此,如果要添加一个新的代码文件模块或者链接库,使用高通的方式很麻繁,不如使用meta的办法在cfg里面定义,同时这个方式是仿真和arm通用的,不需要再手动修改template.dsp。(即便是高通的代码我们也可以使用cfg方式,只不过高通自己有一套编译顺序我们不应该干扰他。)

我们要添加定义的宏怎么办呢?原本meta的设计是在一系列的custXX.h文件里面作,这个cust头文件在source/qualcomm/build/ms目录下主要是定义了一系列的所谓feature的开关,其中的XX原本被设计成项目代号,这样就可以在不同项目打开不同的所谓feature开关编译,但是我对这个方法是有保留意见的,因为他的宏定义有一个小问题,他的所谓FEATURE_OFF/FEATURE_ON被定义为了0/1,在代码中的宏判断是#if(FEATURE_STATUSBAR_ONLYIDLE == FEATURE_OFF)可是使用宏最危险的就是它有可能因为编译顺序或遗漏include还没有定义,如果FEATURE_OFF还没有定义,默认也是0,所以这个宏就可能被误读。还有一个仿真添加宏定义比如至关重要的META_EDIT宏的定义,这个也可以放在template.dsp里面# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D “FEATURE_BREW_DOWNLOAD” 其中的/D就是宏定义的开关。

搜索template.dsp有如下

# Begin Custom Build-Checking all include files...InputPath=.resSimulator.ico

“copy.log” : $(SOURCE)“$(INTDIR)” “$(OUTDIR)”

call....SourceQualcommbuildmsads12.batmake-f gendsp.mak copyincfile

# End Custom Build

这里就是以上提及的copy include代码到我们的build/include目录的地方,这是利用了vc6的custom-build的机制,在编译前调用perl脚本。

这里要顺便提一下ads12.bat的重要性,因为高通的编译机制大量地使用perl脚本因此如何初始化perl的运行环境至关重要,因此在所有调用perl脚本前都要先调用这个批命令。同时perl运行于linux/unix环境依靠cygwin才得以运行于windows环境,所以也需要初始化cygwin的环境变量,然而linux/window毕竟有很大区别,比如文件系统就还是有区别,如果你在运行arm编译看到类似于什么as.exe不能正确执行的错误即便你的ads12.bat已经正确运行了很有可能是因为你没有把as.exe的文件属性加上system,比如attrib +s as.exe

b)arm编译

arm编译和仿真编译有着巨大的差别,要复杂的多。首先要从编译资源做起。资源包括图片,文字存放在resource/meta下的image,string,theme目录下,给每个资源编写资源id是一件很繁琐的事情,这里也是依靠了工具运行ImageResConv.bat把image下的所有图片都编篡相应的资源id,比如一个图片文件input_123.png最后就在MetaImg.brh里面变成了

#define IDI_PNG_INPUT_123 8145

命名的原则就是IDI_TYPE_FILENAME,其中type应该是文件类型即扩展名,8145是程序顺序产生无关紧要。这样程序员在代码中按照这个命名原则就省却了更新命名资源id的烦恼了。这个metaImg.brh最终被放在source/meta/res/project目录下,其中project未当前的项目代号,这个必须要在build_res.bat里面设定了比如 @set PROJECT=0803_L201。最终这个metaimg.brh成为metammi.cfg的一栏。文字和图片稍有不同,就是把中文字串资源“T_Yes是”和英文资源“T_YesYes”进行统一编号为metaStr.brh里的“#define T_Yes 3”而相应的实际资源文件则是#define CHINESE_RES_FILE “Chinese.bar”变成了高通的资源文件。

这一切的编译工作都是在一个resource/meta/Build_Res.bat下完成的。

需要提醒注意的是,image路径下任何文件都回被搜罗当作资源图片文件,因此如果使用svn需要删除svn文件或者把图片拷贝出来编译。

编译完资源后就可以开始编译了,但是首先要做的还是设置好ads12.bat,这个的重要性前面已经讲过了,每个人都有可能不同要根据自己的安装路径来设置。运行arm/prj_code.bat其中prj_code代表当前的项目代号,因此相应的在/source/qualcomm/build/ms目录下你要有相同项目代号的prj_code.cmd, prj_code.mak,cust_prj_code.h,同时在/source/meta/res/prj_code/下要有相应的资源文件以便链接。正是编译同样使用meta的收集cfg的方式生成实际的makefile,高通的编译器是支持c++编译的,比如tcpp.exe就是c++编译器,在dmss_rules.min里面有perl脚本根据代码文件扩展名自动选择编译器的规则,因此你也完全可以写c++代码只要你使用.cpp文件扩展名。

高通使用min文件来定义每个小模块包含的源文件,其中还包含了.s文件,这个是一个对大多数pc程序员的巨大的surprise,这里要从程序运行谈起。因为pc的程序的运行地址一般都是relocable的,也就是说运行起在哪里是不需要关心的,是由操作系统的loader加载同时修改代码的偏移地址完成在任意物理地址运行的,但是手机程序的静态加载模块地址却是定死的,当然各个模块的地址可以依靠.scl的文件来调整,这个是linker的一个配置文件,它规定了各个模块的boot内存地址的相对关系,比如以/source/qualcomm/build/ms/q60x0a_rom.scl为例,BB_RAM +0x0

{

dloadarm.o(+RW)

dloadusb.o(+RW)

}

/////////////////////////////////////////////

// added by nick for jvm

//Add liaohs.amoi.com.cn for JAVA

JBLEND_RAM +0x0

{

jblend_*.o(+RW)

}

//End liaohs for JAVA

// added by nick for jvm

/////////////////////////////////////////////

这里实际上规定了dloadarm.o和dloadusb.o的模块的相对位置,同时也隐含着输出了一个地址symbol BB_RAM,同样的java虚拟机的起始地址JBLEND_RAM会在回编码里编成两个symbol: Image$$JBLEND_RAM$$Base和Image$$JBLEND_RAM$$Length,注意这里使用的$$符号是arm编译器内部使用的,和普通的c程序变量名不兼容,为了能够让c程序在链接时候引用这两个地址相关的变量名,需要一个所谓的.s文件来转换。在source/qualcomm/driver/boot目录下的bootmem.c里面可以使用extern来声明

extern byte *Image__ JBLEND_RAM __Base;

extern byte *Image__ JBLEND_RAM __Length;

在boot_data.s文件里面把这些变量名从汇编码的”$“形式转换为”_”:

IMPORT |Image$$JBLEND_RAM$$Base|

IMPORT |Image$$JBLEND_RAM$$Length|

EXPORT Load__JBLEND_RAM__Base

EXPORT Image__JBLEND_RAM__Length

他们的定义是这样子的:

Image__JBLEND_RAM__Base

Image__JBLEND_RAM__Length

而这个所谓的.s文件是在相应的boot.min文件里包含了。这种机制的核心就是为了能够让java虚拟机在起始运行阶段记录相应的内存地址,而这一切都是由于静态加载的地址在编译器就决定了。

b)关于组键编程

高通的组键模型编程基本上和微软的COM机制类似,只不过搞通为了方便嵌入式程序员大多不熟悉c++语法以及某些效率的考虑才使用纯c语法模拟实现,但是微软的COM机制博大精深,高通仅仅借用了其中内存资源释放管理与组建创建的很小一部分。

任何一个组键一定要实现最基本的三个接口方法,即AddRef,Release,QueryInterface,这三个方法看似简单,但是meta的代码的写法似乎都有不妥之处。

第一,这三个方法都应该是完全对外调用的不应该随随便便当作内部方法来使用,比如有的人在组件的constructor,也就是所谓component_new方法里面不设定nRef计数为1,却调用QueryInterface来

增加引用计数,虽然效果看上去一样,实际却是有令人混淆的嫌疑,我以为在constructor里面直

接设定引用计数为1是最自然的,因为逻辑上一个组件的创建者也就是它的拥有者当然应该增加

计数为1。

第二,queryInterface另一个被滥用的例子是meta的程序组件不论classid为何都一律最后返回SUCCESS,这个从原理上肯定是不对的,原本一个组件有可能支持多个接口方法,取决于传进来的classid是

有可能不支持而返回失败的。这些都为将来的可能的扩展埋下了隐患。

DCD |Image$$JBLEND_RAM$$Length|DCD |Image$$JBLEND_RAM$$Base|

高通的组件机制提供的内存资源管理还是一种非强制的模式,也就时说这个机制需要程序员自觉遵守,一旦有人违反了这个规则那么资源就不能被自动回收,比如,你在调用了queryinterface或者通过createinstance获得了这个接口指针,但是忘记调用release,或者别的模块传递给你一个参数你调用了addref却没有在结束调用release,那么这个资源就再也不会被释放。

有鉴于此,高通还有一套类似于java的垃圾回收机制强制资源的回收,这个应该是在IModule里面的一个实现,也就是说在一个module创建的时候就建立了某种上下文(AEEAppContext,按照高通的代码说明就是所谓的一个不透明的32位长整数,我们可以想象很可能就是module的起始地址,当然这个纯属猜测无关紧要。)于是在这个所谓上下文中所有调用内存分配函数malloc都会在内存的起始处被加上这么一个上下文标志,于是在这个module结束的时候,brew会强制把所有在heap里有这个标志的内存回收,这个就是所谓的垃圾回收机制。这个本来是好事可以让程序员不用操心资源回收有缺漏,比如象上边提到的组建的引用计数错误,忘记release的情况,但是对于一些跨模块使用的资源却有可能是一个灾难。

案例1:一个组件作为参数从模块A传递到了模块B,模块B的程序也正确的addref表明他还要继续使用这个对象。但是当模块A结束的时候,在组建的destructor里面的release方法检查到了引用计数不为0也正确的不做释放内存的调用,看上去挺好,但是brew的垃圾回收机制却是无条件执行的,他不管三七二十一会把所有模块A上下文的内存统统释放。于是模块B虽然进行了正确的addref以为组件还存在继续调用结果访问的却是错误的内容,因为很有可能brew把回收的内存已经分配给了新生成的组件或者模块。针对这个情形要求程序员对于可能跨模块使用的对象的内存分配使用所谓的系统上下文,也就是调用AEEEnterAppContext的时候使用NULL参数,然后再分配内存,随后在AeeLeaveAppContext,这个方法要保证的一个前提是该组件在所有的内存分配时候都要采用这种系统上下文。一旦在初始化之外也有分配内存的做法或者使用别的函数分配的内存也还有可能有问题。比如笔者在使用sqlite的组件中的一个所谓DBManager接口时就遇到这个问题,当时考虑把这个manager接口做成singleton以便节省资源,这就要求这个对象独立于创建的模块始终存在于系统中,于是在他的初始化在系统上下文内进行,但是没有想到随后每次当创建的模块关闭后再打开新的模块调用这个manager接口都会发生访问错误,后来分析高通很有可能为了加快初始化manager的进度不把所有的内存分配一次性地在初始化做完,而是在实际产生新的database实例的时候分配了一些内存,而这个时候没有在系统上下文处理,属于当前的模块上下文,于是当前模块解体其中的内存自然变成非法了。

案例2:一个组件注册了一个timer的回调事件,但随后就再回调发生之前结束运行被释放了。

Timer的event注册要两个参数都匹配才行,也就是说一个是回调函数指针还有一个是用户自定义的数据指针,所以你要canceltimerevent的时候必须把两个参数都传递正确才行,笔者对于这一点已开始比较吃惊,因为这个和PC上的一些习惯不一致。后来注意到了高通的说明就是你可以把回调函数指针传递null,这个CancelTimerEvent就把所有绑定这个数据结构的event都取消了,所以,鉴于此,我觉得不如自行规定所有的setTimerEvent都把当前的组件指针作为用户数据传递,因为所有的数据都是定义在实现结构里面的,那么在组建的destructor里面无条件调用AEECancelTimerEvent(NULL,pThis)确保取消一切的事件。

案例3:笔者在撰写sqlite的组件时候,需求要求用户可以注册一个eventNotifier以便通知数据库数据的变化,这个要求关心者注册一个回调函数以便在数据表数据变化的时候回调来处理。因为数据库组件很有可能是跨模块使用,比如媒体播放其播放的mp3列表在被资源浏览器删除了文件之后得到通知以便修订播放列表。但是在这个回调函数里面笔者已开始并没有意识到也需要切换到不同的模块上下文,这因为当初设计回调通知机制的时候要求注册信息包括三个要素:感兴趣者的模块上下文,感兴趣的数据表,以及使用的数据库接口指针。那么在数据库组件注意到数据变化调用通知的回调函数的时候是在谁的上下文呢?这里我们没有使用异步通知,而是所谓的同步通知就是说数据已修改立刻通知,因此现在的代码是在数据修

改者的模块上下文,他的通知函数里面的参数调用的数据却很有可能是被通知者的上下文产生的,一旦回调函数有分配内存的动作并且保存到了被通知模块内,就意味着通知者上下文下的内存被保存在了通知者的模块中,将来程序crash也就不足为奇了。

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【外拓的重要性】相关文章:

中共重要重要会议07-27

兴趣重要,责任更重要04-12

做事重要做人也重要04-24

语文重要性05-25

计划重要性04-14

重要性概念05-05

面试重要性05-19

培训重要性05-06

重要性理论05-16

认识重要性05-16

上一篇:寸草春晖-短篇诗歌下一篇:韩庄乡冯庄小学少先队改革总结