STM32 趟坑一览


CubeMX 添加RTX



前言:

STM32CubeMX是意法推出的基于STM32的一款强大的可视化开发软件,在常规的产品开发中,可以结合可视化的硬件配置来完成系统平台的初始化配置,选用一些中间软件包,如OS,FS等。

RTX5是Keil公司打造的一款轻量型,实时,低延迟,高可靠,安全的操作系统,MDK开发环境本身集成了RTX5软件包。但STM32CubeMX中不包含RTX5组件包,并不支持RTX5组件包,这需要在STM32CubeMXb生成的工程文件中手动添加RTX5软件包,下面详细阐述该过程,并对其中的编译错误的更正过程进行了的说明。

开发环境:

  • MDK 5.25

  • STM32CubeMX 4.25

  • STM32CubeMX STM32F4 组件包版本为1.21.0

  • RTX5 5.3.0

一. 在STM32CubeMX生成的工程中添加RTX5源码

1. 打开STM32CubeMX工程

如果中间件FreeRTOS被勾选,要勾选掉,防止两个操作系统同时存在:

upload_downloader_1610940249286_45807139.png

2. 生成MDK工程代码

在STM32CubeMX,生成并打开MDK工程代码。

在MDK的工程Options for target ...的Output选显卡中,勾选掉默认的选项"Browse Iniormation",这样可以加快编译速度,否则编译会非常耗时。


3. 增加RTX5软件组件:

upload_downloader_1610940249483_53685877.png

添加RTOS2-->Keil RTX5,这里为5.3.0版本(单击图片可放大):

upload_downloader_1610940279186_24133307.png

如提示出现“Validation Output",点击信息框下面的"Resolve"。

有两种添加RTX5的方式:库和源代码。这里重点说明如何对添加的RTX5源码进行工程编译,所以这里选择"Source"。

上图 “Keil RTX5”对应的右侧栏目选择"Source",然后点击"Resolve"。

二. 工程编译错误的解决

1. "Unknown Arm Architecture!"错误

尝试工程编译,会提示如下的编译错误:

error:  #35: #error directive: "Unknown Arm Architecture!"

删除工程目录Drivers\CMSIS\Include\下的cmsis_armcc.h

这样工程会使用C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include\cmsis_armcc.h

后一个文件的文件头代码如下:

#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)

  #error "Please use Arm Compiler Toolchain V4.0.677 or later!"

#endif

/* CMSIS compiler control architecture macros */

#if ((defined (__TARGET_ARCH_6_M  ) && (__TARGET_ARCH_6_M   == 1)) || \

     (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M  == 1))   )

  #define __ARM_ARCH_6M__           1

#endif

#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M  == 1))

  #define __ARM_ARCH_7M__           1

#endif

#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))

  #define __ARM_ARCH_7EM__          1

#endif

  /* __ARM_ARCH_8M_BASE__  not applicable */

  /* __ARM_ARCH_8M_MAIN__  not applicable */

/* CMSIS compiler specific defines */

#ifndef   __ASM

  #define __ASM                                  __asm

#endif

#ifndef   __INLINE

  #define __INLINE                               __inline

#endif

#ifndef   __STATIC_INLINE

  #define __STATIC_INLINE                        static __inline

#endif

#ifndef   __STATIC_FORCEINLINE                

  #define __STATIC_FORCEINLINE                   static __forceinline

#endif          

#ifndef   __NO_RETURN

  #define __NO_RETURN                            __declspec(noreturn)

#endif

#ifndef   __USED

  #define __USED                                 __attribute__((used))

#endif

#ifndef   __WEAK

  #define __WEAK                                 __attribute__((weak))

#endif

...

而在STM32CubeMX生成的Drivers\CMSIS\Include\下的cmsis_armcc.h的文件中并无这些宏定义。

特别,如下宏定义分支有效:

#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M  == 1))

  #define __ARM_ARCH_7M__           1

#endif

2. 代码重复冲突错误

再次编译,会出现如下错误:

error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

这是由于STM32CubeMX生成的工程所包含的启动文件"startup_stm32f439xx.s"(Application/MDK-ARM工程文件夹下,见下图)中,已经存在RESET段。这和RTX5的启动文件"startup_stm32f439xx.s"(Deviece工程文件夹下,见下图)中的代码相冲突:

upload_downloader_1610940249302_42179088.png

将Application/MDK-ARM工程文件夹下的"startup_stm32f439xx.s"文件排除在编译之外:

右键点击Application/MDK-ARM工程文件夹下的文件"startup_stm32f439xx.s",

选中“Options for startup_stm32f439xx.s”菜单,弹出(单击图片可放大):

upload_downloader_1610940249302_25027256.png

勾选掉“include in Target Build",如上图(“include in Target Build"未勾选掉之前)。


编译工程,会出现如下错误:

Error: L6200E: Symbol SystemCoreClock multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Error: L6200E: Symbol AHBPrescTable multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Error: L6200E: Symbol APBPrescTable multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

rror: L6200E: Symbol SVC_Handler multiply defined (by stm32f4xx_it.o and irq_cm4f.o).

(单击图片可放大)

upload_downloader_1610940249303_45105712.png

同样的,这是由于STM32CubeMX生成的工程所包含的文件"system_stm32f4xx.c"(Drivers/CMSIS工程文件夹下,见下图)中,已经存在上面编译错误中的段。这和RTX5的文件"system_stm32f4xx.c"(Deviece工程文件夹下,见下图)中的代码相冲突:

upload_downloader_1610940250218_80576118.png

将Drivers/CMSIS工程文件夹中的"system_stm32f4xx.c"排除在编译之外。

工程编译,会提示:

Error: L6200E: Symbol SVC_Handler multiply defined (by stm32f4xx_it.o and irq_cm4f.o).

Error: L6200E: Symbol PendSV_Handler multiply defined (by stm32f4xx_it.o and irq_cm4f.o).

Error: L6200E: Symbol SysTick_Handler multiply defined (by stm32f4xx_it.o and irq_cm4f.o).

同样的,将文件"stm32f4xx_it.c"排除在编译之外。

3.  RTX5示例演示

增加RTX5示例代码:

在"Application/MDK-ARM"列表上点击右键,在弹出的菜单中选中"Add New Item to Group 'Application/User'":

upload_downloader_1610940251158_15975779.png

弹出对话框:

upload_downloader_1610940251479_67736049.png

注意要防止这里的man.c文件存放路径和STM32CubeMX生成的main.c文件的路径相冲突。

在工程中排除掉"Application/User"下的main.c文件的编译。

最后的工程文件列表如下(红色框处的标注为排除在工程编译之外的文件):

upload_downloader_1610940251869_34153400.png

编译工程,提示:

STM32F429_176\STM32F429_176.axf: Error: L6218E: Undefined symbol _Error_Handler (referred from tim.o).

复制"Application/User"下的main.c中的_Error_Handler函数到新增的"Application/MDK-ARM"下的main.c文件中。

在main.c中新增任务,最后的代码如下:

/*----------------------------------------------------------------------------

 * Application main thread

  *---------------------------------------------------------------------------*/

void task1 ( void * argument )

{

 

    // ...

    for (;;){

        osDelay ( 30 );

    }

   

}

 

void task2 ( void * argument )

{

 

    // ...

    for (;;){

        osDelay ( 20 );

    }

   

}

 

int main ( void ) {

 

    // System Initialization

    SystemCoreClockUpdate ();

    #ifdef RTE_Compiler_EventRecorder

        // Initialize and start Event Recorder

        EventRecorderInitialize ( EventRecordError , 1U );

    #endif

    // ...

    osKernelInitialize ();               // Initialize CMSIS-RTOS

    osThreadNew ( task1 , NULL , NULL );     // Create application main thread

    osThreadNew ( task2 , NULL , NULL );     // Create application main thread

    osKernelStart ();                    // Start thread execution

    for (;;) {}

   

}

最后,在MDK的"Project"中,Clean Targets,再次全部编译。

注意,Clean Targets这一步是必须的,否则,调试启动时,无法跳转到最终所使用的main.c文件的main函数中。







来自:计算机科学 / 软件综合
 
7
张静茹 作者
2个月26天前 修改于 2个月26天前
1楼

例如串口同时在DMA发送和DMA接收,DMA接收到一半我要终止DMA的话,只能调用HAL_UART_DMAStop把接收DMA和串口DMA都停止。
换言之,不能单独停止DMA接收。
我理解的接收DMA和发送DMA是两个独立的操作,为什么不能单独停止? 


HAL_UART_DMAStop()函数的确是uart接收和发送同时关闭,找了好久终于找到只关闭接收的函数了。
只关闭接收的函数。HAL_UART_AbortReceive()


https://www.stmcu.org.cn/module/forum/thread-606385-1-1.html

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2个月26天前
2楼

Demo\Demo.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

工程中包含了不只一个启动文件

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2个月25天前
3楼

image.png

回头试试

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2个月25天前 修改于 26天1时前
4楼

RTX + HAL 

HAL Tick选择其他定时器提供 SYS->Timebase Source

NVIC->取消SystemTickTimer 取消System service call via swl instruction 取消Pendable request for system service

Keil 中选择RTX 但不要选择启动代码,不然启动代码有两份

内存不足检查RTX默认分配内存太大


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2个月25天前
5楼


void Task1(void* args)
{
	osDelay(1000);
	char TxBf[] = "HelloDMA0";
	//HAL_UART_Transmit_DMA(&huart1, (uint8_t*)TxBf, sizeof(TxBf));
	while (1) {

		//HAL_DMA_RegisterCallback(&hdma_usart1_tx, HAL_DMA_XFER_CPLT_CB_ID, Uart1_DMA_TxComplete);
		HAL_UART_Transmit_DMA(&huart1, (uint8_t*)TxBf, sizeof(TxBf)-1);
		//osEventFlagsWait(Uart1_Recv_Event, 01, osFlagsWaitAny, osWaitForever);
		/*__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TC4);
		while (__HAL_DMA_GET_FLAG(&hdma_usart1_tx, DMA_FLAG_TC4) == 0);*/
		while(huart1.gState != HAL_UART_STATE_READY)
		{}	
		
		osDelay(1);
	}
}

DMA发送字符串 串口助手显示数据错乱,原因是C语言字符最后有个\0  串口助手显示错乱

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2个月23天前
7楼
#pragma SAVE           // save current optimization level
#pragma OPTIMIZE(7)    // disable function block optimization
void func (void)  {

}
#pragma RESTORE        // restore original optimization level

keil设置某段程序的优化等级,V6编译器仅支持按文件设置编译等级

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
26天12时前
9楼

VisualGDB_新建工程无芯片可选.png VisualGDB_环境配置_编译错误解决方法.jpg

新建工程无芯片可选

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
26天12时前
10楼

编译错误.png

系统属性 Keil Setting 设置Arm CPU Type 



回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
26天12时前
11楼

Toolchain选择arm-eabi时不能直接引用Keil的RTX操作系统,即使设置了头文件Include路径

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
26天11时前 修改于 26天11时前
12楼

main.c

stm32f1xx_it.c

stm32f1xx_hal_msp.c

stm32f1xx_hal_timebase_tim.c

stm32f1xx_hal_gpio_ex.c

stm32f1xx_hal_tim.c

stm32f1xx_hal_tim_ex.c

stm32f1xx_hal.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_rcc.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_rcc_ex.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_gpio.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_dma.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_cortex.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_pwr.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_flash.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_flash_ex.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

stm32f1xx_hal_exti.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

system_stm32f1xx.c

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

fatal error: error in backend: Cannot select: intrinsic %llvm.arm.hint

PLEASE submit a bug report to http://ds.arm.com/developer-resources/ds-5-technical-support/ and include the crash backtrace, preprocessed source, and associated run script.

Stack dump:

0. Program arguments: C:\Keil_v5\ARM\ARMCLANG\bin\armclang.exe @VisualGDB/Debug/_1_/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.gcc.rsp 

1. <eof> parser at end of file

2. Code generation

3. Running pass 'Function Pass Manager' on module 'D:/STM32/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c'.

4. Running pass 'ARM Instruction Selection' on function '@RCC_Delay'

0x773846D2 (0xE0000046 0x00000000 0x00000000 0x00000000), RaiseException() + 0x62 bytes(s)

0x00E78E76 (0x129E1928 0x02C4BE50 0x0002B3FA 0x076EFB98), ?HandleExit@crashRecoveryContext@LLvm@@QAEXH@Z() + 0x16 bytes(s)

0x002818F7 (0x01756590 0x00000000 0x00000024 0x00000004), ??8DelayImportDirectoryEntryRef@Object@LLvm@@QBE_NABV012@@Z() + 0x7597 bytes(s)

0x017564EC (0x00000000 0x00000024 0x00000004 0x017565DF), ?Legalize@SelectionDAG@LLvm@@QAEXXZ() + 0x13C bytes(s)

0x01756590 (0x073AD078 0x00A4FE24 0x073AD050 0xFFFFFF00), ?Legalize@SelectionDAG@LLvm@@QAEXXZ() + 0x1E0 bytes(s)

0x017565DF (0x129E1928 0x00000024 0x00000004 0x00000000), ?Legalize@SelectionDAG@LLvm@@QAEXXZ() + 0x22F bytes(s)

0x01673683 (0x129E1898 0x1299F768 0x00000000 0x076EFB98), ?DoInstructionSelection@SelectionDAGISel@LLvm@@aaEXXZ() + 0x253 bytes(s)

armclang: error: clang frontend command failed with exit code 70 (use -v to see invocation)

Product: MDK Professional 5.33

Component: ARM Compiler 6.15

Tool: armclang [5dd79400]


Target: arm-arm-none-eabi

armclang: note: diagnostic msg: 

********************


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:

Preprocessed source(s) and associated run script(s) are located at:

armclang: note: diagnostic msg: C:\Users\Game\AppData\Local\Temp\stm32f1xx_hal_rcc-68691d.c

armclang: note: diagnostic msg: C:\Users\Game\AppData\Local\Temp\stm32f1xx_hal_rcc-68691d.sh

armclang: note: diagnostic msg: 


********************

Failed to compile stm32f1xx_hal_rcc.c. armclang.exe exited with code 70


========== Project Build Summary ==========

    STM32F103ZET6  built in 00:04

========== Build: 0 Succeeded, 1 Failed, 0 Skipped ==========

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

fatal error: error in backend: Cannot select: intrinsic %llvm.arm.isb

PLEASE submit a bug report to http://ds.arm.com/developer-resources/ds-5-technical-support/ and include the crash backtrace, preprocessed source, and associated run script.

Stack dump:

0. Program arguments: C:\Keil_v5\ARM\ARMCLANG\bin\armclang.exe @VisualGDB/Debug/_1_/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.gcc.rsp 

1. <eof> parser at end of file

2. Code generation

3. Running pass 'Function Pass Manager' on module 'D:/STM32/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c'.

4. Running pass 'ARM Instruction Selection' on function '@__NVIC_DisableIRQ'

warning: 'armv4t' is unsupported in this version of the product

warning: 'arm7tdmi' is unsupported in this version of the product

fatal error: error in backend: Cannot select: intrinsic %llvm.arm.hint

PLEASE submit a bug report to http://ds.arm.com/developer-resources/ds-5-technical-support/ and include the crash backtrace, preprocessed source, and associated run script.

Stack dump:

0. Program arguments: C:\Keil_v5\ARM\ARMCLANG\bin\armclang.exe @VisualGDB/Debug/_1_/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.gcc.rsp 

1. <eof> parser at end of file

2. Code generation

3. Running pass 'Function Pass Manager' on module 'D:/STM32/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c'.

4. Running pass 'ARM Instruction Selection' on function '@hAL_PWR_EnterSLEEPMode'

0x773846D2 (0xE0000046 0x00000000 0x00000000 0x00000000), RaiseException() + 0x62 bytes(s)

0x773846D2 (0xE0000046 0x00000000 0x00000000 0x00000000), RaiseException() + 0x62 bytes(s)

0x00E78E76 (0x12843520 0x02C4BE50 0x0002B3FA 0x076EF730), ?HandleExit@crashRecoveryContext@LLvm@@QAEXH@Z() + 0x16 bytes(s)

0x00E78E76 (0x129EC5B0 0x02C4BE50 0x0002B3FA 0x076919F0), ?HandleExit@crashRecoveryContext@LLvm@@QAEXH@Z() + 0x16 bytes(s)

0x002818F7 (0x01756590 0x00000000 0x00000024 0x00000004), ??8DelayImportDirectoryEntryRef@Object@LLvm@@QBE_NABV012@@Z() + 0x7597 bytes(s)

0x002818F7 (0x02C4BE50 0x0002B3FA 0x076919F0 0x129EC5B0), ??8DelayImportDirectoryEntryRef@Object@LLvm@@QBE_NABV012@@Z() + 0x7597 bytes(s)

0x017564EC (0x1285E4DC 0x0777F2C4 0x1289A010 0x076EF730), ?Legalize@SelectionDAG@LLvm@@QAEXXZ() + 0x13C bytes(s)

0x1285E4D0 (0x0777F2C4 0x1289A010 0x076EF730 0x07748250) <unknown module>

0x1285E4DC (0x1289A010 0x076EF730 0x07748250 0x00000000) <unknown module>

0x129EC5B0 (0x0002B3FA 0x076919F0 0x129EC5B0 0x00000000) <unknown module>

0x0777F2C4 (0x076EF730 0x07748250 0x00000000 0x00000000) <unknown module>

0x02C4BE50 (0x076919F0 0x129EC5B0 0x00000000 0x12999598), ??_7?$parser@P6APAVScheduleDAGSDNodes@LLvm@@PAVSelectionDAGISel@2@w4Level@CodeGenOpt@2@@Z@cl@LLvm@@6B@() + 0xDC4 bytes(s)

0x1289A010 (0x0000000F 0x000001CB 0x00000001 0x00000000) <unknown module>

0x0002B3FA (0x129EC5B0 0x00000000 0x12999598 0x0000000C) <unknown module>

0x076919F0 (0x00000000 0x12999598 0x0000000C 0xFFFFE000) <unknown module>

0x07776A00 (0x000001CB 0x00000001 0x00000000 0x00000000) <unknown module>

0x129EC5B0 (0x03E8A5A8 0x00000002 0x0771D6D8 0x00000001) <unknown module>

0x129AB610 (0x00000002 0x0771D6D8 0x00000001 0x00000009) <unknown module>

0x03E8A5A8 (0x0771D6D8 0x00000001 0x00000009 0x0771D638), ?ID@SelectionDAGISel@LLvm@@2DA

armclang: error: clang frontend command failed with exit code 70 (use -v to see invocation)

Product: MDK Professional 5.33

Component: ARM Compiler 6.15

armclang: error: clang frontend command failed with exit code 70 (use -v to see invocation)

Tool: armclang [5dd79400]


Product: MDK Professional 5.33

Component: ARM Compiler 6.15

Tool: armclang [5dd79400]

Target: arm-arm-none-eabi


Target: arm-arm-none-eabi

armclang: note: diagnostic msg: 

********************


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:

Preprocessed source(s) and associated run script(s) are located at:

armclang: note: diagnostic msg: C:\Users\Game\AppData\Local\Temp\stm32f1xx_hal_cortex-09d854.c

armclang: note: diagnostic msg: C:\Users\Game\AppData\Local\Temp\stm32f1xx_hal_cortex-09d854.sh

armclang: note: diagnostic msg: 


********************

项目属性 KeilSetting 中设置CPU Type

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
21天2时前 修改于 3天15时前
13楼

切换V6 编译器时 FreeRTOS 编译报错

使用

STM32Cube_FW_H7_V1.8.0\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC

替换

STM32Cube_FW_H7_V1.8.0\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS


定时器触发ADC DMA读不到数据时,要单独声明启动定时器

 HAL_TIM_Base_Start(&htim6); 


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
3天16时前 修改于 3天15时前
14楼

引用RTX 系统 下载后无法调试 

在系统属性中Linker Memory Layout 配置ROM地址 Base ROM address Base RAM address


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
3天13时前
15楼

1、问题


KEIL compiler 设置为 “use default compiler version 5” 可以正确编译以下汇编和C混合代码,更改编译器为V6.12后不识别__ASM关键字,并对汇编语法报错。


 替换为


__ASM void MSR_MSP(uint32_t addr)

{

    MSR MSP, r0 

    BX r14

}



2、解决办法


6.12编译器对于汇编和C的混合代码格式做了要求,按照以下方式修改汇编代码,即可编译通过。


void MSR_MSP(uint32_t addr) 

{

    __ASM("MSR MSP, r0"); 

    __ASM("BX r14");

}

 


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
3天11时前 修改于 2天20时前
16楼

Keil 添加RTX引用以后 调试时 永远卡在HardFault_Handler

RTX_Config.h 中 Global Dynamic Memory size 默认设置的32768 太大


 

//   <o>Global Dynamic Memory size [bytes] <0-1073741824:8>

//   <i> Defines the combined global dynamic memory size.

//   <i> Default: 32768



设置的太小会导致 任务不启动

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
2天6时前 修改于 3时24分前
17楼

Keil 在线调试工程运行一切正常,正常运行无法启动

Keil勾选MicroLib ,printf 重定向错误

STM32F103_MD HD 定义错误 全部重新编译

usb转串口导致 芯片不正常复位


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
3时20分前
18楼

Additional Memories 报错的话  先保存 再添加

C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

    <ExtraMemories>

        <ExtraMemoryDefinition>

            <Name>RAM_ITC</Name>

            <Address>0</Address>

            <Size>131072</Size>

            <Type>RAM</Type>

            <ContainsText>true</ContainsText>

            <ContainsData>true</ContainsData>

            <ContainsBSS>true</ContainsBSS>

            <PreserveUnusedSymbols>false</PreserveUnusedSymbols>

        </ExtraMemoryDefinition>

        <ExtraMemoryDefinition>

            <Name>RAM_DTC</Name>

            <Address>536870912</Address>

            <Size>131072</Size>

            <Type>RAM</Type>

            <ContainsText>true</ContainsText>

            <ContainsData>true</ContainsData>

            <ContainsBSS>true</ContainsBSS>

            <PreserveUnusedSymbols>false</PreserveUnusedSymbols>

        </ExtraMemoryDefinition>

    </ExtraMemories>


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
张静茹作者
3时4分前
19楼

狗x的IDE 引用了一个库文件 死活都报找不到函数,找了一天时间才发现还需要右键设置Item Type 为库

而我以前引用都只是添加到工程里就可以的

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
张静茹
学者 机友 笔友
文章
131
回复
1812
学术分
1
2010/12/30注册,3 小时前活动
暂无简介
%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}