ZYQ
ZYQ
我已不再支持 W80X 任何相关问题的回复, 请大家不要私信, 有问题找 isme 谢谢

注册于 2 年前

回答
172
文章
8
关注者
11

demo 例子中是有 http 升级的例子的可以参考下

非常感谢你使用 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

整个程序发一下吧 , 直接问这个问题

保证 CDK 工程下只有一个工程, 擦除 W800 的 Flash , 重新编译 debug 看下, 我怀疑你是 Flash 没有擦除导致, 需要明确的的是 YOC 的 FLASH 布局分布与 W800 官方的 FLASH 布局分配是不一致的, 刚才找了个 YOC 的固件编译了一下, 通过反汇编文件确实看到了 你刚才截图的那些指令, 由此可以大概确定你是没有擦除 FLASH 导致的.
由于 CKLINK 的 debug 是基于 FLASH 的, 他要从 FLASH 不断的取指执行, FLASH 是什么就跟你显示什么, 而下方的你看到的汇编代码是根据地址 cklink 的反馈的地址进行跳转的, 这样就会给你产生错觉, 以为不一样.

只有这一张图着实不好分析, 方便的话可以把你的 debug 的工程发出来, 不要 clean 的那种

是不是连接板子的线没接对

CPU 内核是 XT804 内核, 在百度网盘链接中有, 寄存器手册也在

使用 非操作系统的代码的话 找到 gcc_csky. ld 这个文件对照着 W800 的改下就可以了, 改 MEMORY 那里的定义就可以了

错误信息你给完美的错过了, 都没有拍上啊, 还有就是你确定这是 W806 的工程么, W806 可没有 bt wlan 这些啊, 你应该是把 btcontroller; wlan; 这两个添加上了
W806 没有这个不需要添加的
image. png

W806 单机库的话跟 STM32 hal 库的使用方法基本一致, 你参考着做就可以了

直接使用 W806 的单机工程吧

你的这个分析是很有道理的, 确实是这样的, 你可以去除调试器跑一下, 虽然开启了 cache, 关于你的想法将代码段放到 RAM 中是可行的, 但是需要考虑你得 RAM 是否能够容纳这么大的代码段, 可以将部分函数放到 RAM 中执行以达到加快执行效率, 如果可以的话能否放出代码, 看看能到否帮你优化下

不上系统的话参考 W806 裸机库那样做, 上系统的话可以参考 w806 的 freertos 工程, 本人不建议从官方给的 sdk 库文件剥离出来, 因为 sdk 藕合度太高了

发布
问题