TA的每日心情 | 开心 5 天前 |
---|
签到天数: 1077 天 连续签到: 1 天 [LV.10]以坛为家III
|
这篇移植FreeRTOS并驱动LED计数。
一、下载FreeRTOS源码
下载地址:https://www.freertos.org/
我下载的是以下版本。
二、添加文件到工程
添加下载的FreeRTOS文件到项目中
三、程序代码
3.1、FreeRTOSConfig.h
- /*
- * FreeRTOS V202212.01
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- *
- */
- #ifndef FREERTOS_CONFIG_H
- #define FREERTOS_CONFIG_H
- /*-----------------------------------------------------------
- * Application specific definitions.
- *
- * These definitions should be adjusted for your particular hardware and
- * application requirements.
- *
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
- *
- * See http://www.freertos.org/a00110.html.
- *----------------------------------------------------------*/
- /* Ensure definitions are only used by the compiler, and not by the assembler. */
- #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
- #include <stdint.h>
- extern uint32_t SystemCoreClock;
- #endif
- #ifndef configENABLE_FPU
- #define configENABLE_FPU 1
- #endif
- #ifndef configENABLE_MPU
- #define configENABLE_MPU 0
- #endif
- #ifndef configENABLE_TRUSTZONE
- #define configENABLE_TRUSTZONE 0
- #endif
- #ifndef configRUN_FREERTOS_SECURE_ONLY
- #define configRUN_FREERTOS_SECURE_ONLY 1
- #endif
- #define configUSE_PREEMPTION 1
- #define configSUPPORT_STATIC_ALLOCATION 0//1
- #define configSUPPORT_DYNAMIC_ALLOCATION 1
- #define configUSE_IDLE_HOOK 0
- #define configUSE_TICK_HOOK 0
- #define configCPU_CLOCK_HZ ( SystemCoreClock )
- #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
- #define configMAX_PRIORITIES ( 56 )
- #define configMINIMAL_STACK_SIZE ( ( uint16_t ) 512 )
- #define configTOTAL_HEAP_SIZE ( ( size_t ) 15 * 1024 )
- #define configMAX_TASK_NAME_LEN ( 16 )
- #define configUSE_TRACE_FACILITY 1
- #define configUSE_16_BIT_TICKS 0
- #define configUSE_MUTEXES 1
- #define configQUEUE_REGISTRY_SIZE 8
- #define configUSE_RECURSIVE_MUTEXES 1
- #define configUSE_COUNTING_SEMAPHORES 1
- #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
- #define configUSE_MALLOC_FAILED_HOOK 0//1
- #define configCHECK_FOR_STACK_OVERFLOW 0//2
- /* Defaults to size_t for backward compatibility, but can be changed
- * if lengths will always be less than the number of bytes in a size_t. */
- #define configMESSAGE_BUFFER_LENGTH_TYPE size_t
- /* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
- /* Software timer definitions. */
- #define configUSE_TIMERS 1
- #define configTIMER_TASK_PRIORITY ( 2 )
- #define configTIMER_QUEUE_LENGTH 10
- #define configTIMER_TASK_STACK_DEPTH 256
- /* Set the following definitions to 1 to include the API function, or zero
- * to exclude the API function. */
- #define INCLUDE_vTaskPrioritySet 1
- #define INCLUDE_uxTaskPriorityGet 1
- #define INCLUDE_vTaskDelete 1
- #define INCLUDE_vTaskCleanUpResources 0
- #define INCLUDE_vTaskSuspend 1
- #define INCLUDE_vTaskDelayUntil 1
- #define INCLUDE_vTaskDelay 1
- #define INCLUDE_xTaskGetSchedulerState 1
- #define INCLUDE_xTimerPendFunctionCall 1
- #define INCLUDE_xQueueGetMutexHolder 1
- #define INCLUDE_uxTaskGetStackHighWaterMark 1
- #define INCLUDE_eTaskGetState 1
- /* Cortex-M specific definitions. */
- #ifdef __NVIC_PRIO_BITS
- /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
- #define configPRIO_BITS __NVIC_PRIO_BITS
- #else
- #define configPRIO_BITS 4
- #endif
- /* The lowest interrupt priority that can be used in a call to a "set priority"
- * function. */
- #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
- /* The highest interrupt priority that can be used by any interrupt service
- * routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT
- * CALL INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A
- * HIGHER PRIORITY THAN THIS! (higher priorities are lower numeric values. */
- #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
- /* Interrupt priorities used by the kernel port layer itself. These are generic
- * to all Cortex-M ports, and do not rely on any particular library functions. */
- #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
- /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
- See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
- #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
- /* Normal assert() semantics without relying on the provision of an assert.h
- * header file. */
- #define configASSERT( x ) if ( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
- /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
- * standard names. */
- #define vPortSVCHandler SVC_Handler
- #define xPortPendSVHandler PendSV_Handler
- #define xPortSysTickHandler SysTick_Handler
- /* Allow system call from within FreeRTOS kernel only. */
- #define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 1
- /* STM32H743 has 16 MPU regions and therefore it is necessary to configure
- * configTOTAL_MPU_REGIONS correctly. */
- #define configTOTAL_MPU_REGIONS 16
- /* The default TEX,S,C,B setting marks the SRAM as shareable and as a result,
- * disables cache. Do not mark the SRAM as shareable because caching is being
- * used. TEX=0, S=0, C=1, B=1. */
- #define configTEX_S_C_B_SRAM ( 0x03UL )
- #endif /* FREERTOS_CONFIG_H */
复制代码
3.2、f_task.c
- <blockquote>#include "main.h"
复制代码
3.3、main.c
- #include "main.h"
- int main(void)
- {
- uint8_t i;
- CLOCK_EnableClock(kCLOCK_Gpio0);
- BOARD_InitDEBUG_UARTPins();
- BOARD_PowerMode_OD();
- BOARD_InitBootClocks();
- BOARD_InitDebugConsole();
- init_led();
- task_create();
- while (1)
- {
- }
- }
复制代码
3.3、lm8168.c- #include "main.h"
- const uint8_t led_num[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6 };
- uint32_t dt=0;
- uint8_t cnt=0;
- uint8_t jsflag=0;
- uint8_t disp_temp[4]={0,0,0,0};
- uint8_t disp_js=0;
- void delay(void)
- {
- volatile uint32_t i = 0;
- for (i = 0; i < 100; ++i)
- {
- __asm("NOP"); /* delay */
- }
- }
- void init_lm8168(void)
- {
- init_lm8168b_pins();
- LM8168_CLK_L();
- LM8168_DAT_L();
- LM8168_EN_L();
- }
- void lm8168_writebyte(uint32_t dat)
- {
- uint8_t i=0;
- LM8168_CLK_L();
- LM8168_DAT_L();
- LM8168_EN_L();
-
- for(i=0;i<18;i++)
- {
- if(dat&0x01)
- {
- LM8168_DAT_H();
- }
- else
- {
- LM8168_DAT_L();
- }
- dat=dat>>1;
- LM8168_CLK_L();
- delay();
- LM8168_CLK_H();
- delay();
- }
- }
- void lm8168_writedat(uint8_t dat, uint8_t seg)
- {
- uint32_t dt=0;
-
- dt |= (seg&0x3f)<<1;
- dt |= dat<<10;
- lm8168_writebyte(dt);
- LM8168_EN_H();
- delay();
- LM8168_EN_L();
- }
复制代码
四、程序运行
下载程序后,串口输出
LED显示
|
|