.net 网络调试助手源码_ThreadX移植详细教程(MDK、GCC兼容)附源码

 

ThreadX 介绍

ThreadX 是专为嵌入式应用而设计的高性能实时内核。同其它实时内核不同, ThreadX具有通用性,使基于RISC(reduced instruction set computer 简化指令集计算机)和 DSP(Digital Signal Processing 数字信号处理)的小型微控制器的应用程序易于升级。ThreadX 易于升级的原因基于其隐藏式结构。因为 ThreadX 的服务以 C 库来执行,只有在应用程序中用到的服务才被纳入运行映像。因此,实际的 ThreadX 的大小完全取决于应用程序。对大多数的应用程序而言, ThreadX 的指令映像从 2Kbyte 到 15Kbyte。

        ThreadX的产品已涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。且安全认证等级基本达到最高,达到项目安全认证等级要求。threadx具有丰富的组件,ThreadX中间件如下: 

Azure RTOS NetX               

      TCP/IP协议标准的高性能实现,与Azure RTOS ThreadX完全集成,可用于所有支持的处理器。

Azure RTOS NetX Duo            

         先进的、工业级的TCP/IP网络栈是专门为深嵌入式实时和loT应用程序设计的。Azure RTOS NetX Duo是一个IPv4和IPv6双网络堆栈,而Azure RTOS NetX是最初的IPv4网络堆栈,本质上是Azure RTOS NetX Duo的一个子集

Azure RTOS FileX                

        一个高性能、兼容文件分配表(FAT)的文件系统,完全集成了Azure RTOS ThreadX ano,可用于所有支持的处理器。

Azure RTOS GUIX                 

        小巧、快速,并且可以轻松地移植到任何能够支持图形输出的硬件配置上。

Azure RTOS GUIX Studio          

        提供了一个完整的嵌入式图形用户界面(GUl)应用程序设计环境,便于在应用程序的GUI中创建和维护所有图形元素。

Azure RTOS USBX                 

        高性能的USB主机、设备和运行中(OTG)嵌入式栈,它与Azure RTOS ThreadX完全集成,可用于所有Azure RTOS线程支持的处理器

Azure RTOS TraceX               

        基于 Windows 的分析工具。它为嵌入式开发者提供了实时系统事件的图形视图,使其能够了解和更好地理解其实时系统的行为。

 

ThreadX 移植

 一、移植环境介绍

        芯片:stm32F103ZET6

        工具:stm32CubeMx5.6.0

        MDK编译环境:MDK5.30

        gcc编译环境:ubuntu16.04

        arm-none-eabi-gcc version 4.9.3

参考资料:

①.安富莱嵌入式论坛      

        http://www.armbbs.cn/forum.php?gid=1

②Mculover666 大神博客

        https://blog.csdn.net/Mculover666/article/details/106388532

③ThreadX官方指导手册

二、生成裸机工程 

1. 建立裸机工程 ,支持MDK、GCC串口输出

    裸机工程参考以下链接: 

http://www.mculover666.cn/posts/578764034/, 创建工程时需要开启某个串口,例如可使用usart1作为调试口。

生成MDK工程后可在usart.c文件中添加以下函数:

int fputc(int ch, FILE *f)

{

HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);

return ch;

}

生成GCC工程后可在usart.c文件中添加以下函数:

int _write(int fd, char *ptr, int len)  

{  

  HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 0xFFFF);

  return len;

}

若两个工程做兼容,我的做法是:

3bd044800a293a6a1d0111086affcf08.png

b737dbc87afc7db50d574c227e917727.png

2. 生成MDK及Makefile工程

afe26a90e910ffedac0e3560eed0a03f.png

3. 编译、验证MDK工程

     MDK工程可直接在keil中编译生成,若无错误,可直接下载验证,查看串口是否有输出。

4. 编译、验证gcc工程

    gcc工程没有IDE搭建的编译环境,需要自行搭建。gcc使用windows或linux搭建均可,本文采用linux桌面版ubuntu搭建gcc编译环境,并使用交叉编译工具链arm-none-eabi-gcc进行编译。安装交叉编译工具链参考如下:

https://blog.csdn.net/zhengyangliu123/article/details/54783443

安装后使用进入文件夹即可使用Makefile工具进行编译。(本文直接将MDK及gcc生成一个工程并放置在虚拟机共享文件夹中)。编译成功后将生成的hex或bin文件使用stm32 st-link

Utility工具烧录至开发板进行验证。

三、ThreadX MDK裸机移植

 1.  下载ThreadX源码

    首先需要下载ThreadX源码,地址:https://github.com/azure-rtos/threadx,如果下载速度很慢,可以自己在gitee上拉去github的代码,之后在自己的gitee仓库pull即可。方法参考:https://blog.gitee.com/2018/06/05/github_to_gitee/。

2. 移植源码到MDK裸机工程

 第一步:新建ThreadX文件夹,可以使用ThreadX文件,(我的命名THREADX看着怪怪的哈哈,不过建立的gcc工程需要改东西就没动它了,这是后话)c5bc145f4de18ec78bef840bd8cb1334.png第二步:将源码中的common和ports文件夹放入刚建立的ThreadX文件夹内。

00acf2fd21774eb22eacbd3e1d42c90d.png

第三步:添加工程中.c .S(注意Threadx的汇编为.S) .h文件

ed39a070d71436ded8397bb92cad0642.png

10f377a390932c9c02a38722885be982.png

77e38ad30c66da07e6a76e9a91c6901a.png

第四步:编译及解决错误

1.两个函数多重定义,原因是ThreadX在内核中已经定义,去掉stm32f1xx_it.c自带的函数

42ae69a5360e36479fb8fb26701eb3c2.png

816c58ff4c69d95e1fef70a99ceba614.png

2.未定义函数,tx_application_define 、__RAM_segment_used_end__,

397b1222c731c0aab91708c8c06af653.png

解决:tx_application_define 为内核初始化时指定线程调度前需要进行操作的函数,我们可以在main.c文件中进行定义该函数,并在该函数中创建线程。

48d334082f0eac05eec2fea622102bd0.png

__RAM_segment_used_end设置为__initial_sp的值

9ce9aed1ceb5310437c0a4dedf7f1196.png

3. 未定义__vectors 

de84a04758973718114b93ad311416ad.png

解决:这是因为stm32启动文件的__vectors为大写__Vectors,修改ThreadX内核的所有__vectors 改为大写。

编译成功了,终于可以进行烧录测试,测试运行结果是否与自己的编码一致,可以在线程中进行打印,具体可获取工程源码。

063dc64703767499a73de5130f92d34c.png

四、ThreadX GCC裸机移植

1. 下载ThreadX源码 同MDK裸机移植

2. 移植源码到MDK裸机工程  同MDK裸机移植

3. 修改Makefile文件

添加ThreadX源码中.c\.S\.h文件

1b24d34266b28563bb95cc38649dcc24.png

42bd3f88e3fdbf9a1ac884ea11fe7d97.png

e62f1b396ffd1b964e6a4de145cc5b24.png

2222c6c1de4551ec5725080d13ddccf5.png

4、编译测试及解决

错误1:

Makefile:248: *** missing separator.  Stop.

解决:

901c5851cf91f0bc52374b845d210a01.png 89ad52de5c44301820c393b54ddbb717.png 错误2: make: *** No rule to make target ` ‘, needed by xxx. Stop. 901c5851cf91f0bc52374b845d210a01.png 参考:

https://blog.csdn.net/vblittleboy/article/details/21012991

错误3: 901c5851cf91f0bc52374b845d210a01.png 7890280d84428ada086896950e458a6b.png

解决:修改STM32F103ZETx_FLASH.ld 链接脚本:

3fc9255e3ae39059102792e08c574a39.png

修改启动文件,作全局声明,详细见工程源码:

ee9539f0cddd87622fa5a1cbda41063f.png

编译成功:

2c39adb17201b57ee1bc31e76e2cd412.png

5. 烧录验证

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新建软件工程的详细过程如下: 1. 打开Keil MDK-ARM开发环境。双击打开Keil MDK-ARM图标,进入开发环境界面。 2. 创建新的软件工程。在工具栏上选择“Project”菜单,然后点击“New Project”选项,弹出新建工程对话框。 3. 设置项目目录和工程名称。在新建工程对话框选择一个合适的目录,并输入工程名称,然后点击“OK”按钮。 4. 选择目标设备。在新建工程对话框的“Device”选项卡,选择目标设备的厂商和芯片型号,并将该设备添加到工程。然后点击“OK”按钮。 5. 配置工程选项。在新建工程对话框的“Options for Target”选项卡,可以配置目标设备的各种选项,例如时钟频率、存储器分配等。完成配置后,点击“OK”按钮。 6. 添加源文件。在左侧的Project窗口,右键点击“Source Group 1”(或其他名称),然后选择“Add Files to Group 'Source Group 1'”选项。在打开的文件选择对话框,选择要添加的源文件,然后点击“Add”按钮。 7. 编译工程。在工具栏上选择“Project”菜单,然后点击“Build”选项,进行工程的编译。编译过程会将源文件转换为可执行的机器代码。 8. 生成可执行文件。编译成功后,在工程目录下会生成一个可执行文件(通常是一个.hex或.bin文件),用于下载到目标设备上运行。 9. 调试运行。将目标设备连接到开发环境上,并在工具栏上选择“Debug”菜单,然后点击“Start/Stop Debug Session”选项,开始调试运行工程。 10. 测试和调优。在调试过程,可以逐步执行代码,查看变量的值以及程序运行状态,通过测试和调优来确保工程的正确性和性能。 以上就是新建软件工程的详细过程,通过这个过程,我们可以开始进行嵌入式软件的开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值