W801 SDK 相关软件问题

发布于 2022-05-16 21: 34: 44

使用 W800 SDK 的过程中有几个问题, 请教一下, 问题如下:
1, 封装后 FREERTOS 的和 queue 队列相关的函数, 实际上把原函数里面的传输结构体队列的功能 (值传递, 不是指针传递) 取消了, 好像只能传输 4 个字节的整型值 (或者说是指针也可以) , 以后看能不能补上这个补丁;
2, 时钟使能里面有 GPIO 使能选项, 没有看到具体使能的代码, 请问在哪里使能的? 这个使能起到什么作用? 好像 IO 使用一直都可以.
3, 内部 RAM 分为 160K 和 128K 两个部分, 其中 128K 是供 SDIO/SPI/UART 使用做为数据缓冲. 软件编译后 RAM 使用大概 150K (bss 段大小) , 这个 150K 是指 160K 里面的? 还是两部分 RAM 使用量总和? 那 128K 是不是只能给三个指定外设使用? 使用 SDIO/SPI/UART 这三个外设编程的时候, 什么时候使用的是这 128K 的 RAM? 三个外设本身内部指定的收发缓冲区好像也没多少, 远达不到这么大内存.
4, 内核支持 DSP 和浮点处理, 这个使用的时候需要额外指定吗? 写一段代码, 怎么知道是使用内核的硬件支持还是软件计算?
5, 有没有不修改 LD 文件, 直接指定文件里某个函数在内存运行的简单方法? 比如在函数前面简单加个前缀? 麻烦举个例子.
多谢!

查看更多

关注者
0
被浏览
1. 8k
ZYQ
ZYQ 2022-05-16
我已不再支持 W80X 任何相关问题的回复, 请大家不要私信, 有问题找 isme 谢谢

非常感谢你使用 W800 芯片, 针对你疑惑做如下解答
1, 封装只是为了 SDK 是更好符合当时的软件设计架构 说白了就是更方便当时软件设计开发^^ , 如果你有其他需求的话, 可以调用 Freertos 本身的 API 接口也是可以的.
2, 针对这个问题的话使用, 在 SDK 的 main 函数的开始是有使能的, 你可以查阅下代码看下.
image. png

3, 这个的话你看链接文件的话, 实际上定义 RAM 的话是定义在一起的, 软件上来说的话并没有明确的限制, 你可以当作一块 RAM 使用, ld 文件中也是这样用的.
你说的 128K 由于跟那些外设挂载在同一个总线上, 是为了数据交换方便, 与 CPU 之间是有 AHB2AHB 桥做分界线, 128KB 作为 CPU 来说是都可以直接访问的, 作为程序执行本身来说
并没有什么太大的区别, 128KB 只是告诉开发者某些外设一定可以用作缓冲区, 同时也表明剩下的 160KB 这些外设不一定可以使用.
4, 针对浮点运算的话, 你如果使用 CDK 编译的话在工程设置选项里有 -mhard-float 选项, 是默认使用的硬件浮点处理, 这个其实是对编译器的一种限制行为, 如果在 linux 下编译的话对应的 makefile 里面也会有的. DSP 的话也是在工程配置选项, 是有链接 DSP 的库的, 你必须调用对应的 API 才可以使用 DSP 指令, 或者你直接调用 DSP 汇编指令达到你的功能, 这些都是可以的.
image. png

5, 这个问题, 没有人规定必须修改 LD 文件才能使得某个函数在 RAM 中运行啊, 取巧的方法就是直接将你的函数放在 data 段里面, 因为 data 段中的数据一定在 RAM 中, 做法也是比较简单的,
只需要在对应的函数前面加上限定符就 OK attribute ( (section (". data") ) ) 论坛下划线不显示 , 需要注意的是, 被修饰的函数体里面不能调用存放在 FLASH 中的函数接口. W800 的编译环境就是基于 gcc 编译链去做的 gcc ld 那一套完全是适用的. image. png

1 个回答

撰写答案

请登录后再发布答案, 点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览