完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文摘录本人博客:http://blog.csdn.net/chengdong1314/article/details/51619881
MPLAB IDE v8.92 只能支持英文目录,所以一般而言是把相应的工程拷到D盘中,然后打开编译,最后如果想要保存工程,应该拷回想要保存的位置 当在中文目录中会出现“找不到指定路径”的错误,如下: 关于超大数组问题: 本实验用的编译器是xc16-gcc.exe,集成开发环境是MPLAB IDE v8.92,当前的编译器配置如下: -g -Wall -mlarge-code -mlarge-data -Os -fno-ivopts 如下图: 其中这里有一个超大的数组: 这时候编译会有这样的一个错误: 从提示可以知道,这是一个数据超出的错误,但是这里是超出了数据段,而不是说超出了芯片的flash,我们可以这样查看是否超过了flash,去掉这个数组编译看看占用了多少flash,如下: 也就是说占用的flash空间是:81459+7674=89133,但是单片机的flash却是这样的: 所以即是加上数组的35408也是124541并没有超出flash,所以这个错误完全是编译器的问题,从网上收到这个文章: http://electronics.stackexchange.com/questions/25878/epmp-on-pic24fj128da210 其中有关键的提示: 所以这里增加-mlarge-arrays这个编译命令,如下: 这时候的编译结果如下所示: 从网上找到这个办法: http://www.microchip.com/forums/m621857.aspx 其中的关键的地方是这样的: 在文件中修改如下: 这时候编译结果如下: 编译成功了,要说明的是,如果数组再增大到一定的程度,如下 这时候又会出现新的错误,本人决定去弄一张更小的图片吧,不要那么大的图片了,所以这个错误将不再深究,错误如下: 从这里看,或许真的是因为溢出flash了 注意:上面只是说明了怎么装数据,并没有说明怎么使用数据,下面的函数给出了一个怎么使用这个数组数据的说明: void show_photo(unsigned short int StartX, unsigned short int StartY, __prog__ unsigned char *BmpAddress) { __prog__ HEADCOLOR *BmpHeadr; unsigned short int Width, Height,Column,row; __prog__ unsigned char *BmpData; BmpHeadr = (__prog__ HEADCOLOR *)BmpAddress; Width = BmpHeadr->w; //177 Height = BmpHeadr->h; //100 BmpData = (__prog__ unsigned char *)(BmpAddress + sizeof(HEADCOLOR)); //sizeof表示该数组内存的多少 单位是字节 算出像素数据在数组中的偏移 LCD_SetPos(StartX,StartX+Width-1,StartY,StartY+Height-1); for(Column=0;Column for(row=0;row Write_Data(*(__prog__ unsigned short int *)BmpData); BmpData +=2; } } } 一定要注意这时候使用的是__prog__类型,而不是const类型 下面是这个函数的调用方法: show_photo(0,0,gImage_100X177); 这个数组的定义是这样的: __prog__ unsigned char gImage_100X177[35408] __attribute__((space(prog)))= { 0X00,0X10,0XB1,0X00,0X64,0X00,0X01,0X1B, 0XDD,0XC6,0XDD,0XC6,0XFE,0XC6,0XFD,0XCE,0XFD,0XCE,0XFE,0XCE,0X1E,0XCF,0X1E,0XCF, 0X1E,0XCF,0X1E,0XCF,0X1E,0XC7,0X1E,0XCF,0X1E,0XCF,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7, 0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XCF,0X3E,0XC7,0X1E,0XC7, 0X1E,0XC7,0X1E,0XC7,0X1E,0XC7,0X3E,0XC7,0X3E,0XC7,0X3E,0XCF,0X3E,0XCF,0X5E,0XCF, 0X5F,0XCF,0X3E,0XCF,0X3E,0XCF,0X3E,0XCF,0X3F,0XCF,0X3E,0XC7,0X3F,0XCF,0X3F,0XCF, 0X3F,0XC7,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,0X5E,0XCF,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF, 现在我们可以看看实验效果了: 下面上传本实验的程序,这个程序的主芯片是PIC24FJ256DA210,液晶型号是S663DE,模块型号是深圳爱维信公司的IGF240320MC28N01 代码用好压软件分成了两份压缩文件: http://download.csdn.net/detail/chengdong1314/9552679 http://download.csdn.net/detail/chengdong1314/9552680 下面是取模软件和图片: http://download.csdn.net/detail/chengdong1314/9552683 |
|
相关推荐
|
|
本文摘录于本人博客:http://blog.csdn.net/chengdong1314/article/details/51649570
注意:本实验的芯片是PIC24FJ256DA210,用到的开发环境是:MPLAB IDE v8.92 编译工具是xc16-gcc.exe PIC单片机在硬件仿真的时候如果配置字配置不好,会出现不能仿真的后果,会有下面提示: PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settings and program the device before proceeding. 如下图: 这时候我的配置字是这样的: _CONFIG1( WDTPS_PS32768 & FWPSA_PR128 & ALTVREF_ALTVREDIS & WINDIS_OFF & FWDTEN_OFF & ICS_PGx2 & GWRP_OFF & GCP_OFF & JTAGEN_OFF) _CONFIG2( POSCMOD_XT & IOL1WAY_OFF & OSCIOFNC_OFF & OSCIOFNC_OFF & FCKSM_CSDCMD & FNOSC_PRIPLL & PLL96MHZ_ON & PLLDIV_DIV2 & IESO_OFF) _CONFIG3( WPFP_WPFP255 & SOSCSEL_SOSC & WUTSEL_LEG & ALTPMP_ALTPMPEN & WPDIS_WPDIS & WPCFG_WPCFGDIS & WPEND_WPENDMEM) 配置字中关于硬件仿真的有两个地方十分关键: 1.关闭写保护WPDIS_WPDIS 2.设置好正确的仿真端口 ICS_PGx2 这里的写保护倒是关闭了,但是仿真引脚端口配置有问题,我们看配置字关于仿真管脚的说明: 下面对比一下本实验板的电路图: 仿真器管脚 单片机管脚: 对比一下说明说我们可以可以看出: ICS<1:0>这两个位应该配置成11 但是有一点要说明ICS_PGx1才是吧ICS<1:0>配置成11,而不是ICS_PGx3,,这一点我是实验出来的,修改配置字后如下: _CONFIG1( WDTPS_PS32768 & FWPSA_PR128 & ALTVREF_ALTVREDIS & WINDIS_OFF & FWDTEN_OFF & ICS_PGx1 & GWRP_OFF & GCP_OFF & JTAGEN_OFF) _CONFIG2( POSCMOD_XT & IOL1WAY_OFF & OSCIOFNC_OFF & OSCIOFNC_OFF & FCKSM_CSDCMD & FNOSC_PRIPLL & PLL96MHZ_ON & PLLDIV_DIV2 & IESO_OFF) _CONFIG3( WPFP_WPFP255 & SOSCSEL_SOSC & WUTSEL_LEG & ALTPMP_ALTPMPEN & WPDIS_WPDIS & WPCFG_WPCFGDIS & WPEND_WPENDMEM) 这时候再次仿真将不会有任何的问题,仿真步骤如下: 先全局编译,点击下图中所圈的按钮: 编译结果如下: 然后就是先把程序下载进单片机: 下载结果如下: 下面就是仿真了,在本实验中,在下面这个函数前打断点: 然后全速运行,执行到这里,这里要说明的一点是,运行程序并不是运行到打断点的地方,而是断点的下一句话: 好了所有的内容讲到,这里 题外话:本例程是PIC控制S6E63D6为主控芯片的OLED液晶,液晶模块是:IGF240320MC28N01爱维信光电.pdf 到今天晚上的这个点为止我还是没有能够调出这个液晶来,现在看看本实验的波形把 好了,本实验到这里结束 现在上传本实验的源代码 因为代码有点大,所以这里代码分成两份压缩文件,压缩工具为好压软件 http://download.csdn.net/detail/chengdong1314/9547546 http://download.csdn.net/detail/chengdong1314/9547547 好了,晚安 2016 6 12 23:41 |
|
|
|
|
|
IAR版本:EWARM-CD-6701-5794 破解文件夹名称:EWARM-6701-crack
下面是IAR的破解说明,破解文件最后会上传,如果你们已经有了就不需要下载 仅供学习使用!!商业用户请购买正版软件。 把破解文件覆盖到安装目录同文件即可(两个目录都复制): C:Program Files (x86)IAR SystemsEmbedded Workbench 6.5commonbin C:Program Files (x86)IAR SystemsEmbedded Workbench 6.5armbin 破解后,每次打开 IAR 都会 弹出一个窗口,关闭他即可,不影响使用。 建议删掉此文件:(或者重命名) C:Program Files (x86)IAR SystemsEmbedded Workbench 6.5commonbinLicenseManager.exe K60项目的编译设置问题: 当第一次编译工程的时候,如果你不够幸运,那么将会出现下面的错误: 提示的意思是没有找到相应的头文件,也就是说头文件目录没有设置好,我们看工程文件里并没有包含头文件目录,IAR不知道去哪里找到相应的头文件,比如“common.h”这个文件,这时候如果我们点击工程右键看到的头文件目录设置应该是这样的: 应该做如下设置: 也就是在目录这一栏里填上这些内容: $PROJ_DIR$UserInc $PROJ_DIR$SourceInc $PROJ_DIR$SourceIncIAR $PROJ_DIR$SourceInckinetis $PROJ_DIR$LibraryCMSISInc 这其中的$PROJ_DIR$是一个目录变量,就是代表我们点开工程的那个工程文件所在的目录,这里是C:UsersAdministrator.O7R3KN5DJILOXHBDesktop1.按键点灯,也就是说$PROJ_DIR$=“C:UsersAdministrator.O7R3KN5DJILOXHBDesktop1.按键点灯” 那么我们还可以看看这些内容,$PROJ_DIR$UserInc就是代表这个目录: 相应的$PROJ_DIR$SourceInc就是这个目录: 这些目录就是我们存放头文件的目录 下面来看看第二个要填的地方 这些是宏设置,在宏设置里填上这些内容: DEBUG IAR ARM_MATH_CM4 MK60DZ10 简单的讲讲这几个宏的作用,下面的一张图片就能够很好的说明了DEBUG这个宏定义的作用: 就是说这几个宏在工程文件里会用到,省掉这几个宏编译就有问题,这也说明我们也可以用这几个宏定义,比如DEBUG就能够让我们的文件区分是调试的程序还是成型的程序 到这里编译就会成功,如下: 在这里如果编译成功,但是没有生成相应的文件,也就是提示 linking faile相似的内容,就是因为我们没有选择好合适的链接脚本,这个是编译原理的内容了,所谓的连接就是把编译各个C文件生成的结果合在一起,变成能够直接烧录到单片机的固件,比如.hex文件,这里作如下设置: 也就是说这个选择上这个文件: 仿真这样操作: 这时候我们点击仿真并没有把程序下载到单片机中,而是软件仿真,仿真这一栏是这样的: 这时候我们需要选择硬件仿真,这样选择: 这时候仿真如果出错是因为我们没有选择好烧录配置文件,这样选择: 这时候就能够正确的仿真成功了 到这里,就可以在板子上看到实验现象了 就讲到这里 下面是破解方法和破解文件: http://download.csdn.net/detail/chengdong1314/9549473 因为IAR安装包有点大这里就不上传了,大家可以去网上下载 下面是本实验用到的工程文件,是一个按键点灯小实验: http://download.csdn.net/detail/chengdong1314/9549486 |
|
|
|
|
|
本文全部内容来自:http://wenku.baidu.com/link?url= ... OsxciWCO9whjwBodwNq
这里本人只是提出相关的注意事项: 本人的设置:D:Keil_v5ARMARMCCbinfromelf.exe --bin --output ./Output/Ble_Vendor_Service.bin ./Output/Ble_Vendor_Service.axf 其中的 ./代表的是工程所在的目录 |
|
|
|
|
|
MPLAB IDE v8.92 只能支持英文目录,所以一般而言是把相应的工程拷到D盘中,然后打开编译,最后如果想要保存工程,应该拷回想要保存的位置
当在中文目录中会出现“找不到指定路径”的错误,如下: |
|
|
|
|
|
关于超大数组问题:
本实验用的编译器是xc16-gcc.exe,集成开发环境是MPLAB IDE v8.92,当前的编译器配置如下: -g -Wall -mlarge-code -mlarge-data -Os -fno-ivopts 如下图: 其中这里有一个超大的数组: 这时候编译会有这样的一个错误: 从提示可以知道,这是一个数据超出的错误,但是这里是超出了数据段,而不是说超出了芯片的flash,我们可以这样查看是否超过了flash,去掉这个数组编译看看占用了多少flash,如下: 也就是说占用的flash空间是:81459+7674=89133,但是单片机的flash却是这样的: 所以即是加上数组的35408也是124541并没有超出flash,所以这个错误完全是编译器的问题,从网上收到这个文章: http://electronics.stackexchange.com/questions/25878/epmp-on-pic24fj128da210 其中有关键的提示: 所以这里增加-mlarge-arrays这个编译命令,如下: 这时候的编译结果如下所示: 从网上找到这个办法: http://www.microchip.com/forums/m621857.aspx 其中的关键的地方是这样的: 在文件中修改如下: 这时候编译结果如下: 编译成功了,要说明的是,如果数组再增大到一定的程度,如下 这时候又会出现新的错误,本人决定去弄一张更小的图片吧,不要那么大的图片了,所以这个错误将不再深究,错误如下: 从这里看,或许真的是因为溢出flash了 注意:上面只是说明了怎么装数据,并没有说明怎么使用数据,下面的函数给出了一个怎么使用这个数组数据的说明: void show_photo(unsigned short int StartX, unsigned short int StartY, __prog__ unsigned char *BmpAddress) { __prog__ HEADCOLOR *BmpHeadr; unsigned short int Width, Height,Column,row; __prog__ unsigned char *BmpData; BmpHeadr = (__prog__ HEADCOLOR *)BmpAddress; Width = BmpHeadr->w; //177 Height = BmpHeadr->h; //100 BmpData = (__prog__ unsigned char *)(BmpAddress + sizeof(HEADCOLOR)); //sizeof表示该数组内存的多少 单位是字节 算出像素数据在数组中的偏移 LCD_SetPos(StartX,StartX+Width-1,StartY,StartY+Height-1); for(Column=0;Column for(row=0;row Write_Data(*(__prog__ unsigned short int *)BmpData); BmpData +=2; } } } 一定要注意这时候使用的是__prog__类型,而不是const类型 下面是这个函数的调用方法: show_photo(0,0,gImage_100X177); 这个数组的定义是这样的: __prog__ unsigned char gImage_100X177[35408] __attribute__((space(prog)))= { 0X00,0X10,0XB1,0X00,0X64,0X00,0X01,0X1B, 0XDD,0XC6,0XDD,0XC6,0XFE,0XC6,0XFD,0XCE,0XFD,0XCE,0XFE,0XCE,0X1E,0XCF,0X1E,0XCF, 0X1E,0XCF,0X1E,0XCF,0X1E,0XC7,0X1E,0XCF,0X1E,0XCF,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7, 0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XCF,0X3E,0XC7,0X1E,0XC7, 0X1E,0XC7,0X1E,0XC7,0X1E,0XC7,0X3E,0XC7,0X3E,0XC7,0X3E,0XCF,0X3E,0XCF,0X5E,0XCF, 0X5F,0XCF,0X3E,0XCF,0X3E,0XCF,0X3E,0XCF,0X3F,0XCF,0X3E,0XC7,0X3F,0XCF,0X3F,0XCF, 0X3F,0XC7,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,0X5E,0XCF,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF, 现在我们可以看看实验效果了: |
|
|
|
|
|
我们可以在手册上看到管脚分布表:
和管脚映射有关的是:RP0~RP31(双向映射,既能够做输出映射也能够作为输入映射),共32个管脚 RPI32~RPI43(只能够作为输入映射,不能够作为输出映射),共12个管脚 拥有映射功能的一共是44个管脚 对于输入方向的映射方法是这样的: RPINR0~RPINR27这些寄存器中的[5:0]和[13:8]都对应着某个功能要映射到的RPINR[n]管脚,比如RPINR0[13:8]就对应着INT1(外部中断1)要映射到的管脚数,如果RPINR0[13:8]=0,那么RP0就映射给了中断1,也就是说功能是定死的,但是这个功能要映射到哪个管脚是可以配置的 输出映射的方法和输入映射的方法恰恰相反,对于输出来说,管脚是定死的,但是这个管脚的功能是可以配置的,功能如下: 而那个管脚要配置那个功能是通过RPOR0~RPOR15这16个寄存器来配置的,寄存器结构和输入映射方法类似,比如RPOR0[13:8]确定RP1这个管脚的功能,而RPOR0[5:0]确定RP0这个管脚的功能,一共16个寄存器也就能够配置32个管脚,刚刚够用,RPOR0定义如下: 最后补充一下:本文所针对的单片机具体型号是:PIC24FJ256DA210 手册上传: http://download.csdn.net/detail/chengdong1314/9596860 |
|
|
|
|
|
ElfBoard ELF 1板卡-开发板启动后打印random: nonblocking pool is initialized
393 浏览 0 评论
G2D图像处理硬件调用和测试-基于米尔-全志T113-i开发板
1860 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡- 减少uboot阶段的等待时间
1260 浏览 0 评论
嵌入式学习-飞凌ElfBoard ELF 1板卡 - 重新打包文件系统发现ftp无法正常连接
1753 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-6ull设置两个ip
2305 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 08:12 , Processed in 0.411847 second(s), Total 38, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号