ccs下了也有两个月了 踩了不少坑但是都没有记录下来 于是第二次碰到一样的问题就会有种“诶这个问题我之前见过的!那会儿是怎么调通的来着……”
本着种一棵树最好的时间是十年前和现在的心态,决定把遇到的坑们先记录下来。
1.RAM可以烧,flash不行
1.1 不进main
试着使用以前的备份,可以进main,然后重新用新的程序,又能进了 很迷。有的时候还要切换一下flash和ram烧
1.2 进了程序卡串口引脚
发现之后的程序加了一段测试引脚gpio的程序 然后这段程序把串口的引脚给初始化了(捂脸)
1.3不卡串口了改卡发送中断了,不然就卡硬件中断
现在中断不使能就进硬件中断 中断使能了就卡在发送中断里 。而且很迷的是在ram下就不会触发这个..发现串口除了tx有个中断fifo也有个中断没关 。。原因其实和发送中断没关系,把发送中断关了,程序继续运行到了OLED的初始化,这里面有一个延时的程序,用的是官方例程的DELAY_US 然后好死不死的RAM下没问题 FLASH下会硬件中断...改成for循环延时就好了。
2.和IAR不一样,这里的局部变量最开始一定要赋初值(话说本来就应该这样的好吧..之前用iar为什么不赋值不出错..)否则会有一个根据内存的随机值在里面。
3.这里的inline直接写inline 不用想iar里写__INLINE
4.这里的int是16位的,而且程序里普通的数字都是int型,因此对寄存器操作时请注意在数字后面加个L(参考上一篇博文)
5.如果发现程序烧不进去的情况,首!先!检!查!接线,从pc到下载口有四个地方都有可能松,电源没有供也可能导致下不进去,都检查过再去判断芯片锁或者烧。
6.
program will not fit into available memory. placement with alignment/blocking fails for section ".text" size 0x125d page 0. Available memory ranges: 28333_RAM_lnk.cmd /Carrot_Mind line 133 C/C++ Problem
提示内存不够,通常是发生在ram模式下,因为默认的ram_lnk.cmd给的代码区只有1K,不小心就写超了
把
PAGE 0 :
/* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */
RAMM0 : origin = 0x000050, length = 0x0003B0
RAML0 : origin = 0x008000, length = 0x001000
RAML1 : origin = 0x009000, length = 0x001000
RAML2 : origin = 0x00A000, length = 0x001000
RAML3 : origin = 0x00B000, length = 0x001000
修改成
PAGE 0 :
/* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */
RAMM0 : origin = 0x000050, length = 0x0003B0
RAML0 : origin = 0x008000, length = 0x001000
RAML1 : origin = 0x009000, length = 0x003000
// RAML2 : origin = 0x00A000, length = 0x001000
// RAML3 : origin = 0x00B000, length = 0x001000
就成