﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-鹰空独舞</title><link>http://www.blogjava.net/chubingyu/</link><description>迈着慵懒的步子，走在成长路上.....
Dead </description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:03:06 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:03:06 GMT</pubDate><ttl>60</ttl><item><title>STM32中assert_param的使用</title><link>http://www.blogjava.net/chubingyu/archive/2012/05/31/379680.html</link><dc:creator>鹰空独舞</dc:creator><author>鹰空独舞</author><pubDate>Thu, 31 May 2012 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/chubingyu/archive/2012/05/31/379680.html</guid><wfw:comment>http://www.blogjava.net/chubingyu/comments/379680.html</wfw:comment><comments>http://www.blogjava.net/chubingyu/archive/2012/05/31/379680.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chubingyu/comments/commentRss/379680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chubingyu/services/trackbacks/379680.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在STM32的固件库和提供的例程中，到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件，就可以看到实际上assert_param是一个宏定义；&nbsp;&nbsp;<a href='http://www.blogjava.net/chubingyu/archive/2012/05/31/379680.html'>阅读全文</a><img src ="http://www.blogjava.net/chubingyu/aggbug/379680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chubingyu/" target="_blank">鹰空独舞</a> 2012-05-31 16:53 <a href="http://www.blogjava.net/chubingyu/archive/2012/05/31/379680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSTaskCreate()</title><link>http://www.blogjava.net/chubingyu/archive/2012/05/31/379676.html</link><dc:creator>鹰空独舞</dc:creator><author>鹰空独舞</author><pubDate>Thu, 31 May 2012 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/chubingyu/archive/2012/05/31/379676.html</guid><wfw:comment>http://www.blogjava.net/chubingyu/comments/379676.html</wfw:comment><comments>http://www.blogjava.net/chubingyu/archive/2012/05/31/379676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chubingyu/comments/commentRss/379676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chubingyu/services/trackbacks/379676.html</trackback:ping><description><![CDATA[<table style="width: 100%; table-layout: fixed">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<p><span style="text-align: center; widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 22px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: #336699; font-size: 14px" class="Apple-style-span"><strong style="line-height: 22px"><font style="line-height: 28px" color="#ff0000" size="4">OSTaskCreate()<br style="line-height: 28px" /></font></strong>函数原型：INT8U OSTaskCreate(void(*task)(void *pd),void *pdata,OS_STK *ptos,INT8U prio)<br style="line-height: 22px" />调用者：任务或者是初始化代码。<br style="line-height: 22px" />作用：建立一个新任务，任务的建立可以在多个任务环境启动之前，也可以在正在运行的任务中建立，中断处理程序中不能建立任务，一个任务必须为无限循环结构，且不能有返回点。无论用户程序中是否产生中断，在初始化任务堆栈时，堆栈的结构必须与处理器中断后寄存器入栈的顺序结构相同。</span></span></p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">该函数返回一个8位的整形数，调用该函数需要四个参数：<br style="line-height: 22px" />a 第一个参数：task是一个指向任务代码的指针，也就是用户代码的首地址，平常使用中我们把自己创建的任务的名字作为这个参数即可。<br style="line-height: 22px" />b 第二个参数：pdata指向一个数据结构，该结构用来在建立任务时向任务传递参数。<br style="line-height: 22px" />c 第三个参数：ptos是指向任务堆栈栈顶的指针，一般把创建的任务的堆栈数组首地址赋给它。<br style="line-height: 22px" />任务堆栈用来保存局部变量，函数参数，返回地址以及任务被中断时处理器寄存器的内容，任务堆栈的大小决定于任务的需要以及预计的中断嵌套层数。计算堆栈的大小需要知道任务的局部变量所占的空间，可能产生嵌套调用的函数，及中断嵌套所需的空间，如果初始化常量OS_STK_GROWTH设为1，堆栈被设为从内存高地址向低地址增长，此时ptos应该指向任务堆栈空间的最高地址，反之，如果OS_STK_GROWTH设为0，堆栈将从内存的低地址向高地址增长。<br style="line-height: 22px" />d 第四个参数：prio是任务的优先级。每个任务必须有一个唯一的优先级作为标识，数字越小，优先级越高。</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">返回值：<br style="line-height: 22px" />OSTaskCreate()的返回值为下述之一：<br style="line-height: 22px" /># OS_NO_ERR: 函数调用成功。<br style="line-height: 22px" /># OS_PRIO_EXIST:具有该优先级的任务已经存在。<br style="line-height: 22px" /># OS_PRIO_INVALID: 参数指定的优先级大于OS_LOWEST_PRIO<br style="line-height: 22px" /># OS_NO_MORE_TCB: 系统中没有OS_TCB可以分配给任务了。</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">注意：<br style="line-height: 22px" />1 任何堆栈必须声明为OS_STK类型。<br style="line-height: 22px" />2 在任务中必须调用uCOS提供的下述过程之一：延时等待，任务挂起，等待事件发生（等待信号量，消息邮箱，消息队列），以便其他任务能得到cpu。<br style="line-height: 22px" />3 程序中不能使用优先级0，1，2，3，以及OS_LOWEST_PRIO-3，OS_LOWEST_PRIO-2，OS_LOWEST_PRIO-1，</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">OS_LOWEST_PRIO,这些优先级系统保留，其余的56个优先级提供给应用程序。</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">范例：<br style="line-height: 22px" />本例中，传递给任务Task1()的参数pdata不使用，所以指针pdata被设为NULLL，注意到程序中设定堆栈向低地址增长，传递的栈顶指针为高地址&amp;Task1[1023],如果在你的程序中设定堆栈向高地址增长，则传递的栈顶指针应该为&amp;Task1Stk[0]。<br style="line-height: 22px" />OS_STK Task1Stk[1024];<br style="line-height: 22px" />void main(void)<br style="line-height: 22px" />{<br style="line-height: 22px" />NT8U err;<br style="line-height: 22px" />&nbsp;&nbsp; ...<br style="line-height: 22px" />OSInit();//初始化uCOS-II<br style="line-height: 22px" />....<br style="line-height: 22px" />OSTaskCreate(Task1,(void *)0,&amp;Task1Stk[1023],25);<br style="line-height: 22px" />...<br style="line-height: 22px" />OSStart();//启动多任务环境<br style="line-height: 22px" />}</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">void Task1(void *pdata)<br style="line-height: 22px" />{<br style="line-height: 22px" />pdata=pdata;<br style="line-height: 22px" />for(;;)<br style="line-height: 22px" />{<br style="line-height: 22px" />......&nbsp;&nbsp; //任务代码<br style="line-height: 22px" />}</p>
<p style="padding-bottom: 0px; line-height: 22px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">}</p></div></td></tr></tbody></table><img src ="http://www.blogjava.net/chubingyu/aggbug/379676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chubingyu/" target="_blank">鹰空独舞</a> 2012-05-31 16:23 <a href="http://www.blogjava.net/chubingyu/archive/2012/05/31/379676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式小记</title><link>http://www.blogjava.net/chubingyu/archive/2012/05/29/379455.html</link><dc:creator>鹰空独舞</dc:creator><author>鹰空独舞</author><pubDate>Tue, 29 May 2012 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/chubingyu/archive/2012/05/29/379455.html</guid><wfw:comment>http://www.blogjava.net/chubingyu/comments/379455.html</wfw:comment><comments>http://www.blogjava.net/chubingyu/archive/2012/05/29/379455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chubingyu/comments/commentRss/379455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chubingyu/services/trackbacks/379455.html</trackback:ping><description><![CDATA[<div>NAND FLASH&nbsp; 与NOR FLASH 的区别<br />
<p>与Nand Flash对应的是另一种Flash：Nor Flash，其对应的特点是：<br />&#8220;NorFlash的特点是芯片内执行(XIP,eXecute In Place)，这样应用程序可以直接在flash闪存内运行，不必再把代码读到系统RAM中。如uboot中的ro段可以直接在NorFlash上运行，只需要把rw和zi段拷贝到RAM中运行即可。 &#8221;</p>
<p>而相应地，Nand Flash比较特殊：<br />&#8220;NandFlash器件使用复杂的I/O口来串行地存取数据，8个引脚用来传送控制、地址和数据信息。由于时序较为复杂，所以一般CPU最好集成NAND控制器。另外由于NandFlash没有挂接在地址总线上，所以如果想用NandFlash作为系统的启动盘，就需要CPU具备特殊的功能，如s3c2410在被选择为NandFlash启动方式时会在上电时自动读取NandFlash的4k数据到地址0的SRAM中。如果CPU不具备这种特殊功能，用户不能直接运行NandFlash上的代码，那可以采取其他方式，比如好多使用NandFlash的开发板除了使用NandFlash以外，还用上了一块小的NorFlash来运行启动代码。&#8221;</p>
<p>至于，为什么Nand Flash不能进行XIP的原因，主要是由于物理上的硬件限制，<br />在读取Flash时候，容易出现&#8220;位翻转（bit convert）&#8221;：<br />&#8220;在Flash的位翻转（一个bit位发生翻转）现象上，NAND的出现几率要比NorFlash大得多。这个问题在Flash存储关键文件时是致命的，所以在使用NandFlash时建议同时使用EDC/ECC等校验算法。 &#8221;</p>
<p>但是，如果能保证不出错，也还是可以进行XIP，可以在其上执行代码的：<br />&#8220;所谓XIP,就是CODE是在FLASH上直接运行. NANDFLASH只是不适合做XIP,但并不是不能做XIP.<br />要一段CODE能够正确的运行,要保证它的CODE是连续的,正确的.<br />由于一些电气特性的原因,NOR FLASH能够做到这一点,不存在坏道或坏块,所以能够做XIP.<br />而对于NAND FLASH, 它只保证它的BLOCK 0是好的,其他的块并不保证,虽然出错的几率比较低,但还是有出错的可能,所以CODE可能无法连续正确地执行.<br />但只要你有额外的保障措施,比如说在执行CODE之前去做一次ECC校验,来确保CODE是连续正确的.那你也可以做XIP. 事实上我就正在这么做,而且也证明是成功的. &#8221;</p></div><img src ="http://www.blogjava.net/chubingyu/aggbug/379455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chubingyu/" target="_blank">鹰空独舞</a> 2012-05-29 16:46 <a href="http://www.blogjava.net/chubingyu/archive/2012/05/29/379455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java学习者开始启航</title><link>http://www.blogjava.net/chubingyu/archive/2011/01/16/343040.html</link><dc:creator>鹰空独舞</dc:creator><author>鹰空独舞</author><pubDate>Sat, 15 Jan 2011 16:18:00 GMT</pubDate><guid>http://www.blogjava.net/chubingyu/archive/2011/01/16/343040.html</guid><wfw:comment>http://www.blogjava.net/chubingyu/comments/343040.html</wfw:comment><comments>http://www.blogjava.net/chubingyu/archive/2011/01/16/343040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chubingyu/comments/commentRss/343040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chubingyu/services/trackbacks/343040.html</trackback:ping><description><![CDATA[再做课程设计时遇到的问题，及相应解决办法<br />
1.添加背景音乐（设计的界面太单调，以前只是知道一些基本语法，现想提升一下自己）<br />
主要代码如下：<br />
import java.io.*;&nbsp;<br />
import java.awt.*; <br />
import java.net.MalformedURLException; public static void main(String args[]) {&nbsp;<br />
try { <br />
URL cb; <br />
File f = new File("C:\\Documents and Settings\\Administrator\\桌面\\刀出鞘.wav"); <span style="color: red">//引号里面的是音乐文件所在的绝对路径<br />
</span>cb = f.toURL(); <br />
AudioClip aau; <br />
aau = Applet.newAudioClip(cb); <br />
//aau.play();<br />
aau.loop();<br />
//循环播放 aau.play() 单曲 aau.stop()停止播放 <br />
}<br />
&nbsp;catch (MalformedURLException e){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;}&nbsp;<br />
}<br />
<br />
2.添加背景图片<br />
主要代码：<br />
import java.swing.*; <br />
final ImageIcon img=new ImageIcon("jiemian.jpg");&nbsp; <br />
&nbsp;&nbsp;&nbsp; JPanel jpnl =new JPanel(){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void paintComponent(Graphics g){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.drawImage(img.getImage(),0,0,580,500,null,null);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.paintComponent(g);} }; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jpnl.setBounds(0,0,587,540);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jpnl.setOpaque(false);&nbsp;&nbsp; <br />
3.键盘输入识别<br />
识别'Enter'键,主要代码：<br />
&nbsp;public void keyPressed(KeyEvent ke){<br />
&nbsp; if(ke.getKeyChar() == ke.<span style="color: red">VK_ENTER</span>){&nbsp; //以前不知道，原来有一个系统中有专门的常量对应键盘特殊按钮<br />
&nbsp;&nbsp; System.out.println ("ok................") ;<br />
&nbsp; }<br />
&nbsp;}<br />
4.按钮数组及其响应&nbsp;（刚开始时把它想复杂了）<br />
主要代码：<br />
JButton btn[]=new JButton[5];<br />
.......<br />
void&nbsp; define(){<br />
&nbsp;&nbsp;&nbsp; btn[0]=new JButton("btn1");<br />
&nbsp;&nbsp;&nbsp; btn[1]=new JButton("btn2"); <br />
&nbsp;&nbsp;&nbsp; btn[2]=new JButton("btn3"); <br />
&nbsp;&nbsp;&nbsp; btn[3]=new JButton("&lt;html&gt;按钮四&lt;br&gt;和 按钮五&lt;/html&gt;");&nbsp;&nbsp;&nbsp;//&lt;html&gt;......&lt;br&gt;可以实现按钮上字符串换行显示的功能<br />
&nbsp;&nbsp;&nbsp; btn[4]=new JButton("btn6");<br />
&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;5;i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn[i].addActionListener(new ActListen());<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
&nbsp;class ActListen implements ActionListener<br />
&nbsp;{<br />
&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e)<br />
&nbsp;{<br />
&nbsp;&nbsp;JButton butn=(JButton)e.getSource();<br />
&nbsp;&nbsp;if(butn==btn[1]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;else if(butn==btn[2]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else if(butn==btn[0]){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;else if(butn==btn[3]){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else if(butn==btn[4]){<br />
&nbsp;&nbsp; }<br />
}<br />
......... 
 <img src ="http://www.blogjava.net/chubingyu/aggbug/343040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chubingyu/" target="_blank">鹰空独舞</a> 2011-01-16 00:18 <a href="http://www.blogjava.net/chubingyu/archive/2011/01/16/343040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>