作者存档: 奔跑 - 第50页

Keil C -WARNING L15: MULTIPLE CALL TO SEGMENT 转

1.第一种错误信息

***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1
CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
CALLER2: ?C_C51STARTUP

该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR打断,一段时间后又可以
运行,但是相应数据不会丢失)。
原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。
例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51被定义,它被一个中断服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。
解决方法:
如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。
如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析(overlay analysis)中除去,例如:
OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)
上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLAY指令能使编译器除去上述警告信息。
如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:
1.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必须使用OVERLAY指令将该函数从覆盖分析中除去。
2.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。
3.将该函数设为重入型。例如:
void myfunc(void) reentrant {

}

这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆栈必须在STARTUP.A51文件中配置。
这种方法消耗更多的RAM并会降低重入函数的执行速度。

转自:http://blog.sina.com.cn/s/blog_5a3c063a0100aq5f.html

VB函数字符串操作函数小结

1、Len函数示例:
下面的示例利用 Len 函数返回字符串中的字符数目:
Dim MyString
MyString = Len("VBSCRIPT") ''MyString 包含 8。

2、Trim、Ltrim、Rtrim函数示例:
下面的示例利用 LTrim, RTrim, 和 Trim 函数分别用来除去字符串开始的空格、尾部空格、 开始和尾部空格:
Dim MyVar
MyVar = LTrim(" vbscript ") ''MyVar 包含 "vbscript "。
MyVar = RTrim(" vbscript ") ''MyVar 包含 " vbscript"。
MyVar = Trim(" vbscript ") ''MyVar 包含"vbscript"。

3、Mid函数示例:
下面的示例利用 Mid 函数返回字符串中从第四个字符开始的六个字符:
Dim MyVar
MyVar = Mid("VB脚本is fun!", 4, 6) ''MyVar 包含 "Script"。

4、Left函数示例:
下面的示例利用Left 函数返回MyString 的左边三个字母:
Dim MyString, LeftString
MyString = "VBSCript"
LeftString = Left(MyString, 3) ''LeftString 包含 "VBS

5、Right函数示例:
下面的示例利用 Right 函数从字符串右边返回指定数目的字符:
Dim AnyString, MyStr
AnyString = "Hello World" ''定义字符串。
MyStr = Right(AnyString, 1) ''返回 "d"。
MyStr = Right(AnyString, 6) '' 返回 " World"。
MyStr = Right(AnyString, 20) '' 返回 "Hello World"。

6、LCase函数示例:
下面的示例利用 LCase 函数把大写字母转换为小写字母:
Dim MyString
Dim LCaseString
MyString = "VBSCript"
LCaseString = LCase(MyString) '' LCaseString 包含 "vbscript"。

7、 UCase函数示例:
下面的示例利用 UCase 函数返回字符串的大写形式:
Dim MyWord
MyWord = UCase("Hello World") '' 返回"HELLO WORLD"。

8、StrComp函数示例:
下面的示例利用 StrComp 函数返回字符串比较的结果。如果第三个参数为 1 执行文本比较;如果第三个参数为 0 或者省略执行二进制比较。

Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd" ''定义变量。
MyComp = StrComp(MyStr1, MyStr2, 1) '' 返回 0。
MyComp = StrComp(MyStr1, MyStr2, 0) '' 返回 -1。
MyComp = StrComp(MyStr2, MyStr1) '' 返回 1。

9、InStr示例:
下面的示例利用 InStr 搜索字符串:
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"???
SearchChar = "P"??
MyPos = Instr(SearchString, SearchChar)???''返回 9.
注意:返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

10、Split函数示例:
Dim MyString, MyArray, Msg
MyString = "VBScriptXisXfun!"
MyArray = Split(MyString, "x",-1,1)
'' MyArray(0) contains "VBScript".
'' MyArray(1) contains "is".
'' MyArray(2) contains "fun!".
Response.Write(MyArray(0))

11、Replace函数示例:
Replace("ABCD", "BC", "12") ''得到A12D[结束]

用TDA2822M制作的几款小功放 转

TDA2822M外围电路简单,适用电源电压范围宽(1.8~15V),输出功率较大,体积小,选它做一些小的功放电路很容易上手,效果也不错,下面具体介绍几款用它制作的MP3功率接续器,将MP3输出的信号接入该接续器,带动一对小音箱,在一间20平米的房间欣赏音乐还是不错的。


TDA2822M主要参数

1.OTL双声道功率接续器


  这个电路用一片TDA2822M,CZ1为外接电源输入插座,D1~D4组成桥式全波整流电路,K1为电源开关,C1为电源滤波电容。如果外接电源为直流电源,D1~D4可不用,CI保持原容量。如果为交流电源,D1~D4保留,C1容量加大为1000uF,D5为电源指示LED,R1为LED的限流电阻。后面的电路为TDA2822M的经典应用电路具体原理不再赘述。


上图为TDA2822M OTL应用时的PCB图,板子面积为55×46mm。


上图为该电路的3D视图。

  该款小功率功放不用电位器控制音量,这样可以降低成本和减小PCB板子面积。控制音量用MP3上的音量控制来实现。

2.BTL双声道功率接续器


上图为电原理图,该款功放用两块TDA2822M,每块接成BTL工作模式,其他部分与OTL电路相同。该款电路与OTL电路相比,输出功率更大。


TDA2822M BTL模式PCB图


TDA2822M BTL模式3D图

这是做好的小功放整机正面


背面


小音箱用IC卡话机手柄的口承盖制作,当然也可以用其他的材料制作,比如化妆品中的护肤霜盒,只要直径与喇叭直径相差不大,喇叭能够放入盒内就行。在盒的正面钻上几圈小圆孔,一只小音箱就能用了。



BTL模式的PCB板子尺寸与OTL模式的PCB板子尺寸相同,主要不同点就是OTL电路用一块TDA2822M,而BTL电路则需要两块。

3.带直流音量控制、高低音调节、左右声道平衡的功率接续器

  该款功放选用了一块日本东芝公司生产的直流音量控制、高低音调节、左右声道平衡调节IC,型号为TA7630。功放部分采用两块TDA2822M,每块一个声道。另外将变压器、稳压电源、整流电源做在同一块板子上,尺寸为120×95mm。

  直流调节的好处是克服了电位器磨损带来的调节噪音,使面部布局更加灵活,电位器的安装不受引线的局限。


电源理图


PCB图


3D图


做好的成品


面板布局,电平指示部分用TA7666,双声道电平指示IC。收音机用了一块现成的电调谐收音机板,做成后感觉用着还行,尤其是播放MP3,效果很好,不次于一百多元的电脑音箱。

转自:http://hi.baidu.com/cjs3928/blog/item/e5db0bd8b62fc32610df9b77.html

TDA2822M 8足典型功放电路原理分析(图) 转

信息]
型号: TDA2822M
名称/功能: 1W单电源音频功率放大器
生产商: STMicro
[推荐销售商]
广州先思电子有限公司 (点击查看详细信息)
[商品图片]
"TDA2822M音频功放运放类"
[今日报价]
查询报价
[网友评论]
相关讨论 发表意见
[选型指南] 封装/功能/性能/主要应用/供货能力等介绍:
     TDA2822M这款芯片在这个栏目中的地位是微不足道的,也许它已经过时了,但它在我的成长过程中起到的作用却是十分微妙的。学生时代拿它做功放,后来做成有源音响到夜市上去卖,一个晚上全部售罄。这是我第一次赚到RMB,那种喜悦与鼓励是无法用语言来描述的。一件简单的事情也许就决定了一个人的人生观。这些年我很少有时间坐下来写东西,也就是现在我很想写点什么。
     由于找不到合适的文字说明,这里我随便写点,方便不喜欢看E文的朋友了解一下这款芯片:
     TDA2822M是一款单电源,低电压双功放,电压最低可到1.8V。9V电源8欧姆负载输出功率1W,BRIDGE连接输出功率1.3W。
TDA2822M增益比较大,因此容易自激;频响还可以,细节可以看数据手册中的图片。其外部电路简单,搭电路的时候电容尽量找些好牌子的,效果是有些差别的哦。
     还有就是TDA2822M与TDA2822不是一回事。买的时候别弄错了。TDA2822M是8DIP的。
     另外在网上看到有用运放NE5532替代功放TDA2822M一说,感觉有点搞笑,根本就是两种不同类型的东东嘛。不过话又说回来,他们的功率有点相近,也不耽误使用,呵呵。
[相关资料下载] 所列资料均保证可以下载
数据手册: 点击这里下载,非压缩文件请使用右键下载
相关文章资料: 资料整理当中,请继续关注

转自:http://hi.baidu.com/%CF%FE%D4%C2%C7%EF%BA%D3/blog/item/e31a8ed5ff35d1cf50da4b31.html

鼠标维修——鼠标维修记

今天把我的两个鼠标修好了。特此发篇帖子庆祝一下,也给想自己修鼠标的同学一个参考。
一个是滚轮出问题了,一动他就乱来;另一个是左键单击变双击。
本来想找机会拆个按键,抱着试试的想法在淘宝上搜了一下,居然有专门卖鼠标按键和滚轮编码器的,令我大有兴趣。马上来到华强北,找到专门卖按键、开关的柜台,基本上都有这种鼠标按键(微动开关)和滚轮的编码器(我那个鼠标的滚轮不是光电编码器,是机械的)。价格也不贵,一两毛,但是如果你要买好的,手感好,寿命长的,那可能就要一两块(好像日本进口欧姆龙的最好,用得也多)。
如果你的鼠标也坏了,千万别扔,多可惜啊,快去电子市场买几个按键,自己换。既能体会一些乐趣,又能省下几十块大洋。
欧耶!爽啊,鼠标修好啦。再也不怕他坏啦。

笔画输入法——类似于手机笔画输入的输入法

昨天最大的收获是发现了有一种输入法:笔画输入法。
该输入发类似于手机笔画输入,而且输入速度还挺快。这是他的官方网站地址:http://www.bhsrf.com/
笔画输入法 6.8 豪华版 天空软件园下载地址:http://www.skycn.com/soft/25653.html
天空软件园的介绍如下:
笔画输入法功能特色:
★ 无需懂拼音,无需学五笔,只要会手机发信息就会电脑打字!
★ 鼠标键盘随意用,全能轻松玩输入!
★ 独创笔画定偏旁专利技术,输入效率大提速!
★ 首创交互界面荧屏显示,无需记忆繁琐字根和编码!
★ 独具词汇智能精确联想方案,如虎添翼
初看这款输入法是没什么意义,但是这款输入法还是很有市场的,像我们父母这一辈人大部分是不会拼音的,而学五笔有很费事,要很长时间。所以这个软件对我父母这一辈人用电脑还是很有帮助的。
其实我一开始并不知道有这款软件,是在电子市场看到了优U笔,这个东西插在电脑上就可以打字,既不用拼音也不用五笔,而是用笔画。后面我就想找这个产品里的输入法软件,一搜笔画输入法,居然还真有。
好,好东西啊!回去带给老爸。

VB字符串操作函数

一)类型转换类函数
1. CType(X)
[格式]:
P=CBool(X) ‘ 将X转换为“布尔”(Boolean)类型
P=CByte(X) ‘ 将X转换为“字节”(Byte)类型
P=CCur(X) ‘ 将X转换为“金额”(Currency)类型
P=CDate(X) ‘ 将X转换为“日期”(Date)类型
P=CDbl(X) ‘ 将X转换为“双精度”(Double)类型
P=CInt(X) ‘ 将X转换为“整型”(Integer)类型
P=CLng(X) ‘ 将X转换为“长整型”(Long)类型
P=CSng(X) ‘ 将X转换为“单精度”(Single)类型
P=CStr(X) ‘ 将X转换为“字符串”(String)类型
P=Cvar(X) ‘ 将X转换为“变体型”(Variant)类型
P=CVErr(X) ‘ 将X转换为Error值
‘————————————————–
字符串合并
MsgBox CStr(13) + CStr(23)
‘字符串转换成整形相加
msgbox CInt(“12”)+12 ‘ 字符串转换成整型后与12相加, 结果:24
‘取整数去掉小数点
msgbox Int(-54.6) ‘这里比原值大的整数,结果是 -55
msgbox Fix(54.6) ‘这里比原值小的整数,结果是 -54
(二)常用数学函数
[格式]:
1. Abs(N) 取绝对值
例:Abs(-3.5) 结果:3.5
2. Cos(N) 余弦函数
例:Cos(0) 结果:1
3. Exp(N) e为底的指数函数
例:Exp(3) 结果:20.068
4. Log(N) 以e为底的自然对数
例:Log(10) 结果:2.3
5. Rnd[(N)] 产生随机数
例:Rnd 结果:0–1之间的数
6. Sin(N) 正弦函数
例:Sin(0) 结果:0
7. Sgn(N) 符号函数
‘ 说明:取正负号。Y=Sgn(X) 既 X>0 则Y=1;X=0 则Y=0;X<0 则Y= -1 8. Sqr(N) 平方根 例:Sqr(9) 结果:3 9. Tan(N) 正切函数 例:Tan(0) 结果:0 10.Atn(N) 反切函数 例:Atn(0) 结果:0 [注意]:在三角函数中,以弧度表示。 (一)字符串类函数: 1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输出字符A,因为A的ASCII码等于65 (2)P=Asc(“A”) ‘ 输出65 2. Len(X): 计算字符串X的长度 [格式]: P=Len(X) [说明]: 空字符串长度为0,空格符也算一个字符,一个中文字虽然占用2 Bytes,但也算一个字符。 [范例]: (1) 令X=”” (空字符串) Len(X) 输出结果为0 (2) 令X=”abcd” Len(X) 输出结果为4 (3) 令X=”VB教程” Len(X) 输出结果为4 3. Mid(X)函数:读取字符串X中间的字符 [格式]: P=Mid(X,n) 由X的第n个字符读起,读取后面的所有字符。 P=Mid(X,n,m) 由X的第n个字符读起,读取后面的m个字符。 [范例]: (1) X=”abcdefg” P=Mid(X,5) 结果为:P=”efg” (2) X=”abcdefg” P=Mid(X,2,4) 结果为P=”bcde” 4. Replace: 将字符串中的某些特定字符串替换为其他字符串 [格式]: P=Replace(X,S,R) [说明]:将字符串X中的字符串S替换为字符串R,然后返回。 [范例]: X=”VB is very good” P=Replace(X,good,nice) 输出结果为:P=”VB is very nice” 5. StrReverse:反转字符串 [格式]: P=StrReverse(X) [说明]: 返回X参数反转后的字符串 [范例]: (1)X=”abc” P=StrReverse(X) 输出结果:P=”cba” 6. Ucase(X),Lcase(X):转换英文字母的大小写 [格式]: P=Lcase(X) ‘ 将X字符串中的大写字母转换成小写 P=Ucase(X) ‘ 将X字符串中的小写字母转换成大写 [说明]:除了英文字母外,其他字符或中文字都不会受到影响。 [范例]: (1) 令 X=”VB and VC” 则Lcase(X)的结果为”vb and vc”,Ucase(X)的结果为”VB AND VC” 7. InStr函数:寻找字符串 [格式]: P=InStr(X,Y) 从X第一个字符起找出Y出现的位置 P=InStr(n,X,Y) 从X第n个字符起找出Y出现的位置 [说明]: (1) 若在X中找到Y,则返回值是Y第一个字符出现在X中的位置。 (2) InStr(X,Y)相当于InStr(1,X,Y)。 (3) 若字符串长度,或X为空字符串,或在X中找不到Y,则都返回0。 (4) 若Y为空字符串,则返回0。 日期时间类函数: 1. Year(X),Month(X),Day(X):取出年,月,日 [格式]: P=Year(X) 取出X“年”部分的数值 P=Month(X) 取出X“月”部分的数值 P=Day(X) 取出X“日”部分的数值 [说明]:Year返回的是公元年,若X里只有时间,没有日期,则日期视为#1899/12/30# 2. Hour,Minute,Second函数:取出时,分,或秒 [格式]: P=Hour(X) 取出X“时”部分的数值 P=Minute(X) 取出X“分”部分的数值 P=Second(X) 取出X“秒”部分的数值 [说明]:Hour的返回值是0---23之间 [范例]: X=10:34:23 P=Hour(X) Q=Minute(X) R=Second(X) 则输出结果:P=10,Q=34,R=23 3. DateSerial函数:合并年,月,日成为日期 [格式]:DateSerial(Y,M,D) 其中Y是年份,M为月份,D为日期 [说明]: (1) M值若大于12,则月份从12月起向后推算M-12个月;若小于1,则月份从1月起向后推算1-M个月。 (2) 若日期D大于当月的日数,则日期从当月的日数起,向后推算D-当月日数;若小于1,则日期从1日起向前推算1-D日。 [范例]: P=DateSerial(2000,02,02) 则结果为P=2000/02/02 4.TimeSerial函数:合并时,分,秒成为时间 [格式]:P=TimeSerial(H,M,S) 其中H为小时数,M为分钟数,S为秒数 [说明]:推算原理同上面的DateSerial [范例]: P=TimeSerial(6,32,45) 结果为:P=6:32:45 5.Date,Time,Now函数:读取系统的日期时间 [格式]: P=Date() P=Time() P=Now() [说明]:这三个函数都无参数 [范例]: 若当前时间为2003年8月29日晚上19点26分45秒,则 P=Now() 结果为:P=2003-08-29 19:26:45 6.MonthName:返回月份名称 [格式]:P=MonthName(X) [说明]:X参数可传入1---12,则返回值为“一月”、“二月”……,但是在英文Windows环境下,返回的是”January”,”February”…… [范例]: P=MonthName(1) 则P=“一月” 7.WeekdayName:返回星期名称 [格式]:P=WeekdayName(X) [说明]:X参数可传入1—7,则返回值为“星期日”,“星期一”……,但是在英文windows环境下,返回的是”Sunday”,”Monday”…… [范例]: P=WeekdayName(1) 结果为:P=”星期日” Trim(text1.text) 消除空格 转自:http://51vb.5d6d.com/thread-120-1-1.html

安装WindowsXP原版系统视频教程

这是我以前自己做的一个视频,是在虚拟机里面装的XP。具体请看视频。[swf]http://www.56.com/n_v162_/c44_/17_/8_/gdmgb520_/124602760451_/463400_/0_/44459358.swf[/swf]

第 50 页,共 50 页« 最新...102030...4647484950