C2000芯片的lib库制作遇到问题记录
制作库的大概思路
制作lib库意味着一共有3分代码:完整代码,库代码,工程代码
权限高的拥有完整代码和库代码。
给普通员工工程代码去开发非标项目。
要想制作一个库,首先代码最好要是结构清晰,分层,模块的。
一般把底层驱动打包成lilb
对于应用层,关键代码编译成obj即可。
lib库工程,CCS不能用一般工程直接修改得到,需要重新建立工程。
建立CCS项目时选择lib库。具体方法可以网上搜。项目文件只添加驱动层的c和h即可。编译生成lib文件
对于工程代码,去掉驱动层的所有c文件,去掉应用层的关键C文件。
当需要更新库的时候 以免遗漏 按下列步骤执行:
遇到的问题
其实搞库不复杂,但是这个问题花了我整整一天时间。大概描述下,作为记录。我编译可执行文件烧录后发现不运行,但是完整代码版本烧录可以运行。
于是对工程代码用仿真器逐步排查。
发现运行到一个等待延时函数出的问题。这是个用汇编写的函数,如下:
这个函数是不是怪怪的。对,一旦摸到汇编,就触及到所有程序员的紧张神经。于是怀疑它这种宏方式制作lib可能存在问题。不就延时嘛!搞这么复杂,重写了它 简单粗暴。如下:
心想着,这下应该行了吧。
烧录,run!
。。。。结果,不行!!!
然后事情就变得尴尬起来,大眼瞪小眼,莫名其妙。
又花了3个小时,试了其他可能性,都不行!!!
好吧,这种情况,我们程序员见多了,虽然没思路,但是我一定能解决的。再复杂的问题,也经不起多次尝试。
继续仿真器大法,观察汇编的跳转,很奇怪的是一旦进入这个延时函数,就跳转到一个莫名其妙的地址,但是这个地址明显与map文件中函数的地址不符合。
让deepseek翻译了一下这个汇编函数。提示这个函数是要求在RAM中运行的。
那么是不是Flash拷贝到RAM有问题?于是查看拷贝函数,看似也是正常的。
但是。。。。这个拷贝函数被宏开关控制的。如下
哦!!!解决了,这个宏开关是在开发环境CCS中预处理中定义的。
由于lib库 必须新建CCS项目,新建后,CCS项目配置是默认的,于是手动改了配置保持与完整代码工程一样。
复测,问题解决!发电流正常
复杂的问题就像高考数学压轴题,往往是绕了好几层,但是它也经不起测试的。讲白了就是要花时间费精力。