摘要:
在学习原子的IAP实验,被一段跳转函数困惑typedef void (*iapfun)(void);//定义一个函数类型的参数.iapfun jump2app;//跳转到应用程序段//appxaddr:用户代码起始地址.void iap_load_app(u32 appxaddr){if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)//检查栈顶地址是否合法.{ jump2app=(iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址)MSR_MSP(*(vu32*)appxaddr);//初始 阅读全文
摘要:
使用的神舟IV,驱动SSD1289 DeviceIdCode==0x8989主要涉及三个步骤,1: R01h 设置图像的上下翻转和左右翻转2:R11h 设置扫描方向 3:最重要的,设置curse位置,这里x,y不变 LCD_WriteReg(0x004e,x); //行 LCD_WriteReg(0x004f,y); //列 想要变回横屏时候把x,y交换一下即可,然后改变一下R01h的左右。字库字符等都不用改变。所以扫描方向用处不大,还是自己的curse如何更改 阅读全文
摘要:
《关于数据对齐小结》以下内容均摘抄于网络资源。一.关于数据的一些简介:BSS段(bss segment):BSS段通常是指用来存放程序中未初始化,或初始化为0的全局变量,静态局部变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 数据段(data segment):数据段通常是指用来存放程序中已初始化为非0的全局变量的一块内存区域。数据段属于静态内存分配。 代码段(code segment/text segment):代码段通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 阅读全文
摘要:
用Flash当字库存储载体。思路是先将要用到的字库文件存在SD卡,然后存储到Flash,LCD显示时候从Flash中读取还挺顺利的,移植的原子的程序,自己稍加修改,主要是我的液晶屏函数,Flash读写函数,还有存储文件的flash地址不一样。一晚上搞定,大小字体都OK。挺高兴哈哈。这几天忙工作事情有点耽搁了学习进展嘿嘿在text.c的showstr函数中char的字体颜色随意设置的,可以显示和汉字不匹配,有兴趣可以随便改的。原子的显示进度我并没有用懒得折腾LCD输出字符串了。原子地址:http://openedv.com/posts/list/0/13875.htm?privmsg=1#832 阅读全文
摘要:
因为稍后要用到字库等,所以先把Flash弄了,使用SPI接口,神舟的2Mbyte,原子的6Mbyte,都是W25X系列。神舟真是小气的可以,搞个Flash和EEPROM一样大。与SD的读写byte一样。初始化之后读取Flash ID以此来判断是否初始化成功。主要是一些读写,擦除函数。主要用的神舟代码这次,有部分借鉴原子的初始化,读取ID,擦除,读写都OK了。FLASHSPI_CONFIG_H 1 #ifndef __FLASHSPI_CONFIG_H 2 #define __FLASHSPI_CONFIG_H 3 //#include "sys.h" 4 5 /** 6 * 阅读全文
摘要:
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助。数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子 我 阅读全文
摘要:
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在 阅读全文
摘要:
折腾了差不多快三天,总算出点眉目,操作流程,打开,浏览,读写都没啥问题了。char[] char* a这个C确实比较基础,调用<string.h>中的函数来完成操作,又熟悉了一遍吼吼我们需要的两个主要文件:ff.c 和diskio.c 其中ff.c是我们所需要调用的所有方法,diskio.c是我们移植需要写的底层函数。又走了不少弯路,不过也学到不少,神舟代码移植简单,但是功能不强大,不支持长文件名,并且版本居然是07的不是最新的我晕。而且原子的用动态内存来做,省资源,顺便加深对指针内存的认识,另外昨晚折腾char []也过去了吼吼。因为在ffconf.h里面设置对长文件名的支持为方 阅读全文
摘要:
折腾了好久总算初始化,或许卡容量都通过了,主要问题是粗心,在移植时候CSpin没有改过来,另外有两处SPI1没改过来。原子的例程写的比较清晰,很好读懂。不过功能没有神舟的完整。但也够用了,还是比较喜欢用原子的程序。http://openedv.com/posts/list/13815.htm我们看看SD卡初始化过程。因为我们使用的是SPI模式,所以先得让SD卡进入SPI模式。方法如下:在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送>74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于 阅读全文
摘要:
DHT11与DS18B20很像,都是单总线。不过DHT11操作简单多了,不用查询ROM,不需要操作流程,初始化之后有需要时候读取数据就可以了。DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。其中校验和数据为前四个字节相加。我们使用PE2作为DQ pin,宏定义操作与18B20一样.h1 //PE2作为DHT11的DQ pi 阅读全文