Blog's Home

越努力,越幸运!

main.c(5): error: #130: expected a "{"

这个写代码啊,真的是不能马虎,必须要集中精力,全神贯注,而且,从始至终都要检查语句的正确性,是不是哪里漏了分号,或者是哪个地方的分号写成了冒号,尤其是头文件里面的代码,因为出现这样的错误,它的报错会出现在C文件里面,而你在C文件里面是找不到错误的,这种错误实在是太可怕,会消耗掉你大量的时间与精力,还会破坏你的心情,所以,写代码时一定要集中精神,一丝不苟,一定要细心。

LPC1768系统初始化(时钟配置)

LPC1768的系统初始化函数在官方的例程中已经给出了,用户可以直接使用。然而在使用定时器的时候,发现自己对时钟的配置情况很模糊,不清楚目前CPU的时钟频率是多少,所以也就无法准确的计算定时器的定时时间,在网上搜了下,有说到这个问题的,然而大多数都是一笔带过,没有分析的过程,只给出最后的配置结果,于是干脆自己来分析下,在花了一定的时间的详细的分析了一下初始化的源代码后,终于搞明白了,下面是我的分析过程。

#define CLOCK_SETUP           1
#define SCS_Val               0x00000020
#define CLKSRCSEL_Val         0x00000001
#define PLL0_SETUP            1
#define PLL0CFG_Val           0x0000000B
#define PLL1_SETUP            1
#define PLL1CFG_Val           0x00000023
#define CCLKCFG_Val           0x00000003
#define USBCLKCFG_Val         0x00000000
#define PCLKSEL0_Val          0x00000080
#define PCLKSEL1_Val          0x00000000
#define PCONP_Val             0x042887DE
#define CLKOUTCFG_Val         0x00000000

#define FLASH_SETUP           1
#define FLASHCFG_Val          0x0000303A



/*----------------------------------------------------------------------------
  Define clocks
 *----------------------------------------------------------------------------*/
#define XTAL        (12000000UL)        /* Oscillator frequency               */
#define OSC_CLK     (      XTAL)        /* Main oscillator frequency          */
#define RTC_CLK     (   32000UL)        /* RTC oscillator frequency           */
#define IRC_OSC     ( 4000000UL)        /* Internal RC oscillator frequency   */

/*----------------------------------------------------------------------------
  Clock Variable definitions
 *----------------------------------------------------------------------------*/
uint32_t SystemFrequency = IRC_OSC; /*!< System Clock Frequency (Core Clock)  */

/**
 * Initialize the system
 *
 * @param  none
 * @return none
 *
 * @brief  Setup the microcontroller system.
 *         Initialize the System and update the SystemFrequency variable.
 */
void SystemInit (void)
{
#if (CLOCK_SETUP)                       /* Clock Setup                        */
  LPC_SC->SCS       = SCS_Val;
  if (SCS_Val & (1 << 5)) 
  {             /* If Main Oscillator is enabled      */
    while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready    */
  }
  LPC_SC->CCLKCFG   = CCLKCFG_Val;      /* Setup Clock Divider                */
#if (PLL0_SETUP)
  LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;    /* Select Clock Source for PLL0       */
  LPC_SC->PLL0CFG   = PLL0CFG_Val;
  LPC_SC->PLL0CON   = 0x01;             /* PLL0 Enable                        */
  LPC_SC->PLL0FEED  = 0xAA;
  LPC_SC->PLL0FEED  = 0x55;
  while (!(LPC_SC->PLL0STAT & (1<<26)));/* Wait for PLOCK0                    */
  LPC_SC->PLL0CON   = 0x03;             /* PLL0 Enable & Connect              */
  LPC_SC->PLL0FEED  = 0xAA;
  LPC_SC->PLL0FEED  = 0x55;
#endif
#if (PLL1_SETUP)
  LPC_SC->PLL1CFG   = PLL1CFG_Val;
  LPC_SC->PLL1CON   = 0x01;             /* PLL1 Enable                        */
  LPC_SC->PLL1FEED  = 0xAA;
  LPC_SC->PLL1FEED  = 0x55;
  while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1                    */
  LPC_SC->PLL1CON   = 0x03;             /* PLL1 Enable & Connect              */
  LPC_SC->PLL1FEED  = 0xAA;
  LPC_SC->PLL1FEED  = 0x55;
#else
  LPC_SC->USBCLKCFG = USBCLKCFG_Val;    /* Setup USB Clock Divider            */
#endif
// stop
  // 除了UART0的时钟 = CCLK/2 ,PCKLSEL0负责的其他外设时钟频率均 = CCLK/4 . 即TIMER0/1 频率为72M/4 = 18MHZ
  LPC_SC->PCLKSEL0  = PCLKSEL0_Val;     /* Peripheral Clock Selection         */
//LPC_SC->PCLKSEL0 |= 0x04;// 设置TIMER0 为CCLK/1
  LPC_SC->PCLKSEL1  = PCLKSEL1_Val;
  LPC_SC->PCONP     = PCONP_Val;        /* Power Control for Peripherals      */
  LPC_SC->CLKOUTCFG = CLKOUTCFG_Val;    /* Clock Output Configuration         */
#endif
  /* Determine clock frequency according to clock register values             */
  if (((LPC_SC->PLL0STAT >> 24)&3)==3) 
  {/* If PLL0 enabled and connected      */
    switch (LPC_SC->CLKSRCSEL & 0x03) 
{
      case 0:                           /* Internal RC oscillator => PLL0     */
      case 3:                           /* Reserved, default to Internal RC   */
        SystemFrequency = (IRC_OSC * 
                          (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
                          (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1))   /
                          ((LPC_SC->CCLKCFG & 0xFF)+ 1));
        break;
      case 1:                           /* Main oscillator => PLL0            */ // 12M晶振,最终CPU时钟频率配置为72MHz
        SystemFrequency = (OSC_CLK * 
                          (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
                          (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1))   /
                          ((LPC_SC->CCLKCFG & 0xFF)+ 1));
        break;
      case 2:                           /* RTC oscillator => PLL0             */
        SystemFrequency = (RTC_CLK * 
                          (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
                          (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1))   /
                          ((LPC_SC->CCLKCFG & 0xFF)+ 1));
        break;
    }
  } 
  else 
  {
    switch (LPC_SC->CLKSRCSEL & 0x03) 
{
      case 0:                           /* Internal RC oscillator => PLL0     */
      case 3:                           /* Reserved, default to Internal RC   */
        SystemFrequency = IRC_OSC / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
        break;
      case 1:                           /* Main oscillator => PLL0            */
        SystemFrequency = OSC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
        break;
      case 2:                           /* RTC oscillator => PLL0             */
        SystemFrequency = RTC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
        break;
    }
  }
#if (FLASH_SETUP == 1)                  /* Flash Accelerator Setup            */
  LPC_SC->FLASHCFG  = FLASHCFG_Val;
#endif
}

因为要对官方的系统初始化函数进行一个分析,所以先把相关的代码贴在上面,有点长,我们一条一条来分析。

MATLAB编程注意

1、有时候,程序运行出错,不一定是代码的原因,有可能是所包含路径下的图片的原因。比如我今天画直方图,用了一张从网上下载下来的图片,结果总是运行出错,又不知道问题出在哪里,后来用软件自带的图片一试,果然代码没错,只是图的问题。

>=和==的问题

在写一个代码时, 有个判断语句,我用==,运行结果非我所想,而用>=却能够正确运行,实在是想不通?

if(t == 150)
{
t = 0;
t2++;
if(t2 % 2 == 1)
temp2 = 0xff;
else
temp2 = 0;
}
P0 = (sled_bit[0] | temp2);
if(t >= 150)
{
t = 0;
t2++;
if(t2 % 2 == 1)
temp2 = 0xff;
else
temp2 = 0;
}
P0 = (sled_bit[0] | temp2);

按理来说两种表达都符合要求,然而==无法符合判断条件,而在之前t一直在自加1,是肯定可以到150的。

做事情要细心

今天晚上犯了个非常低级的错误,浪费了很多的时间与精力在这个错误上面。

写代码的时候,竟然有一个源文件都没有添加进工程里面,结果发现现象是错的,于是一直不停的调试,明明非常简单的运用,可就是现象不对,最后却发现原来连初始化和主程序所在的源文件都没有添加进工程里面,而只有一个中断函数所在的源文件的编译代码在运行,却还偏偏他妈的有非常相似的现象,但现象又不完全符合期望,结果调来调去,原来是他妈的源文件都没有添加进工程。

竟然会犯这么低级的错误,太粗心啊!引以为戒!


C语言笔试点复习

一、指针

1、指向数组的指针

int    (*p)[10];        // 指向整型数组的指针

上述声明并没有直接告诉你p是什么,但推断它的类型并不困难——当我们对它执行间接访问操作时,我们得到的是个数组,对该数组进行下标引用操作得到的是一个整型值。所以p是一个指向整型数组的指针。

第5周例会总结

关于互联网起薪比电子业要高的事情:

我和老张说,互联网行业的起薪比电子行业要高不少,他说因为做电子的需要做硬件,这里就要多很多成本,包括硬件本身需要的耗材、芯片、测试仪器等,而且开发周期会长很多,再一个,做互联网的程序员几乎只是单纯的写代码,接触不到系统层面的东西,也培养不了系统的观念,比如现在的JAVA程序员,只要你在培训机构培训3-6个月,你就能拿到8K这个水平的薪资,但是可能一年两年后,这个薪资依旧没什么变化,即上升的空间很小。做这样的工作,虽然刚开始时的薪资会高一点,但是很难向上发展,而且,程序员这种工作可以说是体力劳动,所以才会有IT民工的说法,而我绝对不会想做一个这样的工作者,我想要变成的是工程师,是系统设计师,是领域内的专家,绝非一个小小的程序员,所以,不要眼光狭隘,只看到刚毕业时某些行业多了几千块钱,而应该去关注发展的空间。

半个多月以来的笔试面试总结

其实一从东莞回来,我就已经在着手找工作这件事了,感觉自己准备的挺早的,说句实话,还是对自己不够自信,所以干脆就提前开始,打算拉长战线,给自己足够长的时间。

第一家投的是微雪电子,深圳一家小公司,岗位是单片机工程师,以前就有关注的,因为感觉他的招聘简章写得有点意思。8月30给那边发的简历邮件,然后看到简章上有说觉得特别合适的话可以打一个电话过去,我觉得自己挺合适的,于是我就打了,第二天收到邮件回信,说要问我几个问题,问题我贴在下面。

(译)LPC1768 user's manual

看懂用户手册是编写代码的前堤,所以,今天看了一部分的LPC1768用户手册,并根据自己的理解对部分概述进行了中文翻译,整理如下,欢迎大家一起探讨交流。限于个人水平,译文难免有疏漏与错误之处,还望读者批评指正。

1、PLL0控制寄存器

IAR for arm 使用入门——以LPC1768为例

基于ARM内核的微处理器常用的集成开发环境一般有KEIL MDK与IAR,我以前一直用的是KEIL MDK,可是有一段时间总是出问题,于是就想着什么时候用用IAR,这次刚好想学一款新的芯片,LPC1768,磨刀不误砍柴功,先把开发环境搞定才是现在要做的,所以这次就下载了IAR,鼓捣了两天,网上查了些资料,终于会用了,下面我来介绍一下IAR for arm的配置,以及如何建立一个LPC1768的工程。

«234567891011»
欢迎来到黄建雄的博客,本站点不定期进行博文更新,敬请期待!
  [查看权限]

站内搜索
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 2.2 Prism Build 140101

Copyright © 2015 by 黄建雄. 本站文章除特别声明系转载外,均保留所有权利.
知识共享许可协议本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但请注明来自Blog's home,并保持转载后文章内容的完整。        
湘ICP备15003615号 工业和信息化部

  • 您的鼓励是对我最大的认可