枚举在C、C++下兼容的问题
引子 在C++下,枚举的底层类型可以通过枚举基确定,但C下并不支持这种用法,因此在做两者兼容时可能会出现一些潜在的问题,例如: #ifdef __cplusplus namespace test { namespace impl { #endif enum test_enum { TEST_ENUM_1, TEST_ENUM_2, }; #ifdef __cplusplus } // namespace impl } // namespace utils namespace test { enu…
Python下dll、pyd搜索路径的问题
引子最近在用C++使用pybind11生成pyd以供python调用,并且使用opencv的dll,在测试过程中经常无法找到对应的文件。pyd搜索路径会在当前工作目录和PYTHONPATH环境变量中搜索,也可以通过sys.path.append()临时添加变量:sys.path.append('/path_to_pyd/')备注:通过sys.path.append()临时添加变量会导致pycharm中标注报错,但是能够正常运行。在pycharm中可以在 设置 > 项目 > Pytho…
GUIX移植STM32H7指南
GUIX与STM32H7相关资源 ThreadX官方文档 ThreadX代码仓库 STM32Cube MCU包 GUIX代码仓库 x-cube-azrtos-h7 GUIX与此处使用的LCD GUIX提供了一个软件GUIX Studio专门用于设计图形界面,可以在Microsoft Store微软商店中下载,需要注意的是这个软件在国内无法下载,需要将地区切换为美国。此处使用的LCD是使用ST7735主控,SPI进行通信的,颜色格式为RGB565。 GUIX移植 首先在GUIX代码仓库中下载GUI…
USBX移植STM32H7指南(SD卡模拟U盘)
USBX与STM32H7相关资源 ThreadX官方文档ThreadX代码仓库STM32Cube MCU包USBX代码仓库x-cube-azrtos-h7 USBX移植(仅移植device部分) 首先在USBX代码仓库中下载USBX,将FileX的.\common\core\scr、.\common\usbx_device_classes\scr文件夹下的源文件全部添加到工程中,.\port文件夹下没有源文件,这一部分需要自己实现(STM32提供了相关代码),并添加包含路径.\common\co…
FileX移植STM32H7指南
FileX与STM32H7相关资源 ThreadX官方文档 ThreadX代码仓库 STM32Cube MCU包 FileX代码仓库 x-cube-azrtos-h7 FileX移植 首先在FileX代码仓库中下载FileX,将FileX的.\common\scr文件夹下的源文件全部添加到工程中,.\port文件夹下没有源文件,这一部分需要自己实现(STM32提供了相关代码),并添加包含路径.\common\inc、.\ports\cortex_m7\gnu\inc,此时工程应该可以正常编译,F…
在ThreadX中使用low_power低功耗(ARM)
在单片机系统运行过程中,大部分时间均处于空闲状态,为了减小功耗,可以让ThreadX管理在空闲时进入低功耗模式。在utility\low_power文件夹有关于这个模块使用的详细说明。 移植说明 这个工具位于utility\low_power文件夹下,使用时将这个文件夹下的源文件添加进工程,C/C++的包含路径也添加这个文件夹。ThreadX可用的配置有TX_LOW_POWER_TIMER_SETUP和TX_LOW_POWER_TICKLESS,这两个选项组合能产生三种配置(不使能TX_LOW_…
在ThreadX中使用execution_profile(运行概要)工具(ARM)
在ThreadX中官方提供了execution_profile工具,这个工具能够统计ThreadX在线程、中断、空闲时的时间。通过这些时间,我们可以推算出CPU的利用率。 移植说明 这个工具位于utility\execution_profile_kit文件夹下,使用时将这个文件夹下的源文件添加进工程,C/C++的包含路径也添加这个文件夹。使用这个工具需要实现TX_EXECUTION_TIME_SOURCE和TX_EXECUTION_MAX_TIME_SOURCE两个宏定义,分别为该工具使用的时钟…
在ThreadX中屏蔽中断使用BASEPRI而不是PRIMASK(ARM)
Arm中的中断开关方法 对于中断开关的实现,可以使用PRIMASK(只响应NMI和Hardfault)、FAULTMASK(只响应NMI)、BASEPRI(定义被屏蔽优先级的阈值,比BASEPRI优先级高的中断才可响应) 让ThreadX使用BASEPRI(ThreadX 6.2.1,低版本可能不支持) ThreadX提供的模板默认使用PRIMASK来开关中断,可以使用tx_user.h中添加宏 #define TX_PORT_USE_BASEPRI \\ 使用BASEPRI #define T…
ThreadX移植STM32H7指南
ThreadX与STM32H7相关资源 ThreadX官方文档ThreadX代码仓库STM32Cube MCU包 ThreadX移植 以下基于STM32H7的基本模板(已经移植HAL) 将ThreadX源文件添加进工程中(MDK为例) 在ThreadX代码仓库中下载ThreadX,下载好的ThreadX(6.2.1)有以下文件夹 . ├── cmake # CMake,用于构建工程,使用MDK时可删除 ├── common # ThreadX ├── common_modules # Threa…