【CC1352P测评】继续捣鼓SDK例子
<div class='showpostmsg'> 本帖最后由 cruelfox 于 2019-6-4 21:35 编辑<p> 我新下载安装了 simplelink CC13x2 SDK 2.30 版本,也决定暂时不用 CCS,就命令行解决下问题。进到 examples/nortos/CC1352P1_LAUNCHXL/drivers/pwmled2/gcc 目录,就用里面的 makefile 先试一下呢。</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-makefile"></code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span bbs.eeworld.com.cn="" editor="" handle.png="" http:="" images="" plugins="" static="" style="background-color:rgba(220, 220, 220, 0.498039); background-image:url(<imgdata-cke-saved-src=" widget="">); background-position:initial initial; background-repeat:initial initial; display:block; left:0px; top:-15px"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<p>好象是第一行这里路径就有问题,imports.mak 文件找不到。于是我将它编辑一下,改为用相对路径。顺便看一下 imports.mak 文件里面是什么内容</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-makefile"></code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span bbs.eeworld.com.cn="" editor="" handle.png="" http:="" images="" plugins="" static="" style="background-color:rgba(220, 220, 220, 0.498039); background-image:url(<imgdata-cke-saved-src=" widget="">); background-position:initial initial; background-repeat:initial initial; display:block; left:0px; top:-15px"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<p>原来是一些变量设置。我就把 GCC_ARMCOMPILER 修改为本机上的路径。</p>
<p>然后 make. 几个 obj 都编译出来了(还省事嘛),但是链接就出错了,如这样的:</p>
<p><strong><span style="font-family:Courier"><span style="color:#c0392b">e:/arm-2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: error: pwmled2.out uses VFP register arguments, e:/arm-2014q3/arm-none-eabi/lib\libc_s.a(lib_a-malloc.o) does not</span></span></strong></p>
<p>这是 LIBC 的硬件浮点版本选择出现了问题。看看 makefile 里面怎么写的,在 LFFLAGS 上面指定了</p>
<pre>
<code class="language-makefile"> "-L$(GCC_ARMCOMPILER)/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard" \
"-L$(GCC_ARMCOMPILER)/arm-none-eabi/lib" \</code></pre>
<p>这两行,也许是 CCS 带的 GCC 工具链的目录结构,但我机器上的不是这样的,多半问题出在这里。看前面已经有 -mthumb -mfloat-abi=hard 参数,所以不需要再指定库文件目录,于是我将这两行删除,就顺利链接了。</p>
<p>用 nm 工具看一下ELF文件的符号表,注意到这里</p>
<pre>
<code>00002de0 T NOROM_ChipInfo_GetPackageType
00002df8 T NOROM_ChipInfo_GetChipFamily
00002e14 T NOROM_ChipInfo_GetChipType
00002e64 T NOROM_ChipInfo_GetHwRevision
00002ea8 T NOROM_ThisLibraryIsFor_CC13x2_CC26x2_HwRev1x_HaltIfViolated
</code></pre>
<p>看来现在 SDK 生成的代码就是给芯片 Rev 1.x 使用的,应该没问题了吧。</p>
<p>烧写到板子还得用 Win7 的电脑。我用 SmartRF Flash Programmer 2 来下载刚才编译得到的 ELF 文件:pwmled2.out</p>
<p>然后——板子上的两个LED亮了,并出现呼吸灯的效果,PWM工作了,<strong>表明编译正常</strong>。<br />
<br />
<strong><span style="color:#5e7384">此内容由EEWORLD论坛网友<span style="font-size:medium">cruelfox</span>原创,如需转载或用于商业用途需征得作者同意并注明出处</span></strong></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>注意这个 makefile 里面写的 LDFLAGS</p>
<pre>
<code class="language-makefile">LFLAGS = -Wl,-T,../gcc/CC1352P1_LAUNCHXL_NoRTOS.lds \
"-Wl,-Map,$(NAME).map" \
"-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \
-l:ti/display/lib/display.am4fg \
-l:ti/grlib/lib/gcc/m4f/grlib.a \
-l:third_party/spiffs/lib/gcc/m4f/spiffs_cc26xx.a \
-l:ti/drivers/rf/lib/rf_multiMode_cc13x2_v1.am4fg \
-l:ti/drivers/lib/drivers_cc13x2_v1.am4fg \
-eresetISR \
"-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/nortos" \
-l:lib/nortos_cc13x2_v1.am4fg \
-l:ti/devices/cc13x2_cc26x2_v1/driverlib/bin/gcc/driverlib.lib \
-march=armv7e-m \
-mthumb \
-mfloat-abi=hard \
-mfpu=fpv4-sp-d16 \</code></pre>
<p>用了好些个 -l 参数,指定的是库文件。在我 make 的过程中,并没有出现对库进行编译的过程。我到 SDK 的 source/ti 目录下查看,发现这些文件已经随着 SDK 发布了,也就是 SDK 提供了源代码,同时也提供了编译好的库,默认情况是直接用 TI 提供的二进制库来编译工程的。 这和我熟悉的 STM32 的软件开发不同,后者是每个工程都从源代码引用库文件的。</p>
<p>用同样的方式 (小改一下 makefile) 编译成功了 nortos 的 rfEasylinkRx 和 rfEasyllinkTx 两个工程。分别下载到两块板子里面,就看到它们通信起来了(RX 程序收到 TX 程序发送的数据包时LED闪烁)。</p>
页:
[1]