ThreadX(RTOS)在Ubuntu编译,并执行案例

本文介绍了如何在Ubuntu环境下对ThreadX6.4.1进行编译并在无设备情况下调试samples目录下的案例,包括添加CMakeLists.txt、链接库及解决编译时异常。最后提到在实际开发中推荐使用真实硬件或QEMU模拟器进行调试。
摘要由CSDN通过智能技术生成

关于ThreadX编程的调试,本篇不包含如何正确使用该系统应用在实际项目中,旨在无设备下想要了解该系统。

系统环境:Ubuntu20、gcc、cmake、ninja

代码下载:ThreadX版本6.4.1

https://github.com/eclipse-threadx/threadx/tree/master

ThreadX在linux下编译后可以得到libthreadx.a文件,这个文件可以被链接到samples目录下的案例,并得到一个在Ubuntu上可直接运行的二进制文件。

首先,samples目录下没有编译指导文件,需要添加一个CMakeLists.txt文件,内容如下:

	cmake_minimum_required(VERSION 3.5.0)

	set (TAGETsm sample_tx)
	
	set(SRCSs
		demo_threadx.c
		)
	include_directories(
		PUBLIC
		${CMAKE_CURRENT_LIST_DIR}/../common/inc 
		${CMAKE_CURRENT_LIST_DIR}/../ports/linux/gnu/inc			# 这里针对linux所以使用ports下的linux头
	)
	link_directories(/home/tukuku/Desktop/threadx_tt/threadx/build)	# 这里是为了获取libthreadx.a文件目录,自行产生
	add_executable(${TAGETsm} ${SRCSs})	
	
	target_link_libraries(${TAGETsm}
		libthreadx.a
		)

在根CMakeLists.txt文件末尾添加如下,不要直接复制,详情见注释部分

  ".*~$"
)
set(CPACK_VERBATIM_VARIABLES YES)
include(CPack)
#"
	# -------上面是原本包含的内容,下面这行才是需要添加的----------
	add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/samples)
#"

编译命令:在同根CMakeLists.txt目录下进行,如果出现缺少找不到函数状况见注释

	# -DCMAKE_T****LE=cmake/linux.cmake 可指定在不同编译目标可修改
    cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=cmake/linux.cmake .
	cmake --build ./build
	# 此时能够编译得到 libthreadx.a 文件,此时编译samples时可能会提示缺少各种函数,重新执行
	cmake --build ./build

执行:

        此时在./build/samples/目录下能够看到samples_tx文件,这个文件是可执行的,由于是在linux下编译的三方OS,所以内部执行的输出通常使用串口获取到(猜测)。

如果想要在终端直接显示调试内容可以使用printf函数,添加:

		#include<stdio.h>
		printf("sssssss");

至此,在终端能够看到执行的输出内容,可一步一步的获得执行日志。

调试:

        在编译时默认debug编译,所以可以进行断点调试,但是调试会出现"User defined signal 1/2"这类异常,原因未知。

至此:在Ubuntu下能够编译和运行samples下的案例。当然,这类RTOS最好是能够在实际机器上运行,通过丰富的外部设备进行开发。这种建立在现有的Ubuntu系统上不是很好,或者可以采用qemu仿真软件进行其他CPU架构的开发。如果有机会将发出如何简单使用qemu软件。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadX RTOS操作系统下实现HTTP服务器,可以遵循以下步骤: 1. 配置网络相关的库和驱动程序,如TCP/IP协议栈, Ethernet驱动程序等。 2. 创建一个TCP Socket,绑定到HTTP协议的端口(默认为80)。 3. 使用ThreadX的线程管理功能创建一个线程,用于接收和处理来自客户端的HTTP请求。 4. 在线程中,使用Socket API接收到客户端请求后,解析HTTP请求报文。 5. 根据HTTP请求报文的URL部分,确定所请求的资源的位置。 6. 读取所请求的资源的内容,并将其作为HTTP响应报文返回给客户端。 7. 关闭TCP Socket连接。 下面是一个简单的示例代码: ```c #include "tx_api.h" #include "tx_thread.h" #include "tx_socket.h" #define HTTP_PORT 80 void http_server_thread_entry(ULONG parameter) { int server_socket; int client_socket; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buffer[1024]; int bytes_read; // 初始化网络库和驱动程序 /* ... */ // 创建TCP Socket server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 绑定到HTTP协议的端口 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(HTTP_PORT); server_addr.sin_addr.s_addr = INADDR_ANY; bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 监听连接请求 listen(server_socket, 5); while (1) { // 接受客户端连接请求 client_socket = accept(server_socket, (struct sockaddr *)&client_addr, sizeof(client_addr)); // 读取客户端发送的HTTP请求报文 bytes_read = recv(client_socket, buffer, sizeof(buffer), 0); // 解析HTTP请求报文,确定所请求的资源的位置 /* ... */ // 读取所请求的资源的内容 /* ... */ // 将所请求的资源的内容作为HTTP响应报文返回给客户端 /* ... */ // 关闭TCP Socket连接 close(client_socket); } } int main(int argc, char **argv) { // 初始化ThreadX RTOS /* ... */ // 创建HTTP服务器线程 tx_thread_create(/* ... */, http_server_thread_entry, /* ... */, /* ... */, /* ... */, /* ... */); // 启动ThreadX RTOS tx_kernel_enter(); } ``` 需要注意的是,上面的代码只是一个简单的示例,实际的HTTP服务器需要考虑更多的细节和安全性问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值