├── docs ├── docs │ ├── .nojekyll │ ├── img │ │ ├── logo.png │ │ ├── arch2.png │ │ ├── logo_.png │ │ ├── pt_01.png │ │ ├── pt_02.png │ │ ├── pt_03.png │ │ ├── pt_04.png │ │ ├── tivac.jpg │ │ ├── vm.graffle │ │ ├── vm_01.png │ │ ├── vm_02.png │ │ ├── vm_03.png │ │ ├── vm_04.png │ │ ├── vm_05.png │ │ ├── vm_06.png │ │ ├── vm_07.png │ │ ├── vm_08.png │ │ ├── vm_09.png │ │ ├── vm_10.png │ │ ├── vm_11.png │ │ ├── vm_12.png │ │ ├── vm_13.png │ │ ├── Dcy3-x1VwAALULF.jpg │ │ ├── execution_graph.png │ │ ├── object_container.png │ │ ├── kernel_obj_manager.png │ │ └── a716fd45ly1fyb87jlpjyj20sg0sgn7f.jpg │ ├── _coverpage.md │ └── index.html └── assets │ ├── arch.png │ ├── logo.png │ ├── arch2.png │ ├── favicon.png │ ├── logo_transparent.png │ ├── pinterest_board_photo.png │ ├── twitter_profile_image.png │ ├── youtube_profile_image.png │ ├── facebook_cover_photo_1.png │ ├── facebook_cover_photo_2.png │ ├── facebook_profile_image.png │ ├── instagram_profile_image.png │ ├── linkedin_banner_image_1.png │ ├── linkedin_banner_image_2.png │ ├── linkedin_profile_image.png │ ├── pinterest_profile_image.png │ ├── twitter_header_photo_1.png │ ├── twitter_header_photo_2.png │ └── DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf ├── kernel ├── hal │ └── include │ │ └── hal.h ├── network │ ├── include │ │ └── net.h │ └── mqtt │ │ ├── src │ │ └── mqtt.c │ │ └── include │ │ ├── mqtt.h │ │ └── packet.h └── ceno │ ├── include │ ├── common.h │ ├── os_mutex.h │ ├── os_kernel.h │ ├── os_api.h │ ├── os_list.h │ ├── os.h │ ├── os_semphore.h │ ├── os_queue.h │ ├── os_heap.h │ ├── os_obj.h │ └── os_task.h │ └── src │ ├── os_obj.c │ ├── os_list.c │ ├── os_semphore.c │ ├── os_queue.c │ ├── os_kernel.c │ ├── os_heap.c │ └── os_task.c ├── user ├── obj │ ├── bsp.o │ ├── main.o │ ├── os_obj.o │ ├── interrupt.o │ ├── os_heap.o │ ├── os_kernel.o │ ├── os_list.o │ ├── os_queue.o │ ├── os_task.o │ ├── startup.o │ ├── os_semphore.o │ ├── uart_debug.o │ ├── system_TM4C123GH6PM.o │ ├── interrupt.d │ ├── startup.d │ ├── main.d │ ├── os_obj.d │ ├── os_heap.d │ ├── os_list.d │ ├── os_queue.d │ ├── os_task.d │ ├── os_kernel.d │ ├── os_semphore.d │ ├── system_TM4C123GH6PM.d │ ├── uart_debug.d │ └── bsp.d ├── bin │ ├── CenoRTOS.bin │ └── CenoRTOS.elf ├── optimize │ ├── interrupt.d │ ├── startup.d │ ├── main.d │ ├── os_heap.d │ ├── os_list.d │ ├── os_obj.d │ ├── os_task.d │ ├── os_queue.d │ ├── os_kernel.d │ ├── os_semphore.d │ ├── system_TM4C123GH6PM.d │ ├── uart_debug.d │ └── bsp.d ├── include │ └── os_config.h ├── src │ └── main.c ├── asm │ ├── os_obj.s │ ├── main.s │ ├── os_semphore.s │ ├── os_list.s │ ├── startup.s │ ├── os_queue.s │ ├── os_task.s │ ├── system_TM4C123GH6PM.s │ ├── bsp.s │ └── uart_debug.s └── Makefile ├── .gitignore ├── board └── arch │ └── arm32 │ └── ek-TM4C123gxl │ └── TM4C123GH6PM │ ├── ceno_os │ ├── include │ │ ├── bsp.h │ │ ├── uart_debug.h │ │ └── interrupt.h │ └── src │ │ ├── bsp.c │ │ ├── uart_debug.c │ │ └── interrupt.c │ ├── ld │ └── link.ld │ ├── include │ ├── system_TM4C123GH6PM.h │ └── startup.h │ └── src │ └── startup.c ├── README.md └── conf └── conf.mk /docs/docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /kernel/hal/include/hal.h: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /user/obj/bsp.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/bsp.o -------------------------------------------------------------------------------- /user/obj/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/main.o -------------------------------------------------------------------------------- /user/obj/os_obj.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_obj.o -------------------------------------------------------------------------------- /docs/assets/arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/arch.png -------------------------------------------------------------------------------- /docs/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/logo.png -------------------------------------------------------------------------------- /user/obj/interrupt.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/interrupt.o -------------------------------------------------------------------------------- /user/obj/os_heap.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_heap.o -------------------------------------------------------------------------------- /user/obj/os_kernel.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_kernel.o -------------------------------------------------------------------------------- /user/obj/os_list.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_list.o -------------------------------------------------------------------------------- /user/obj/os_queue.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_queue.o -------------------------------------------------------------------------------- /user/obj/os_task.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_task.o -------------------------------------------------------------------------------- /user/obj/startup.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/startup.o -------------------------------------------------------------------------------- /docs/assets/arch2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/arch2.png -------------------------------------------------------------------------------- /docs/docs/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/logo.png -------------------------------------------------------------------------------- /user/bin/CenoRTOS.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/bin/CenoRTOS.bin -------------------------------------------------------------------------------- /user/bin/CenoRTOS.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/bin/CenoRTOS.elf -------------------------------------------------------------------------------- /user/obj/os_semphore.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/os_semphore.o -------------------------------------------------------------------------------- /user/obj/uart_debug.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/uart_debug.o -------------------------------------------------------------------------------- /docs/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/favicon.png -------------------------------------------------------------------------------- /docs/docs/img/arch2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/arch2.png -------------------------------------------------------------------------------- /docs/docs/img/logo_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/logo_.png -------------------------------------------------------------------------------- /docs/docs/img/pt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/pt_01.png -------------------------------------------------------------------------------- /docs/docs/img/pt_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/pt_02.png -------------------------------------------------------------------------------- /docs/docs/img/pt_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/pt_03.png -------------------------------------------------------------------------------- /docs/docs/img/pt_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/pt_04.png -------------------------------------------------------------------------------- /docs/docs/img/tivac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/tivac.jpg -------------------------------------------------------------------------------- /docs/docs/img/vm.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm.graffle -------------------------------------------------------------------------------- /docs/docs/img/vm_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_01.png -------------------------------------------------------------------------------- /docs/docs/img/vm_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_02.png -------------------------------------------------------------------------------- /docs/docs/img/vm_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_03.png -------------------------------------------------------------------------------- /docs/docs/img/vm_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_04.png -------------------------------------------------------------------------------- /docs/docs/img/vm_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_05.png -------------------------------------------------------------------------------- /docs/docs/img/vm_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_06.png -------------------------------------------------------------------------------- /docs/docs/img/vm_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_07.png -------------------------------------------------------------------------------- /docs/docs/img/vm_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_08.png -------------------------------------------------------------------------------- /docs/docs/img/vm_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_09.png -------------------------------------------------------------------------------- /docs/docs/img/vm_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_10.png -------------------------------------------------------------------------------- /docs/docs/img/vm_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_11.png -------------------------------------------------------------------------------- /docs/docs/img/vm_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_12.png -------------------------------------------------------------------------------- /docs/docs/img/vm_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/vm_13.png -------------------------------------------------------------------------------- /user/obj/system_TM4C123GH6PM.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/user/obj/system_TM4C123GH6PM.o -------------------------------------------------------------------------------- /docs/assets/logo_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/logo_transparent.png -------------------------------------------------------------------------------- /docs/docs/img/Dcy3-x1VwAALULF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/Dcy3-x1VwAALULF.jpg -------------------------------------------------------------------------------- /docs/docs/img/execution_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/execution_graph.png -------------------------------------------------------------------------------- /docs/docs/img/object_container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/object_container.png -------------------------------------------------------------------------------- /docs/assets/pinterest_board_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/pinterest_board_photo.png -------------------------------------------------------------------------------- /docs/assets/twitter_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/twitter_profile_image.png -------------------------------------------------------------------------------- /docs/assets/youtube_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/youtube_profile_image.png -------------------------------------------------------------------------------- /docs/docs/img/kernel_obj_manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/kernel_obj_manager.png -------------------------------------------------------------------------------- /docs/assets/facebook_cover_photo_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/facebook_cover_photo_1.png -------------------------------------------------------------------------------- /docs/assets/facebook_cover_photo_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/facebook_cover_photo_2.png -------------------------------------------------------------------------------- /docs/assets/facebook_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/facebook_profile_image.png -------------------------------------------------------------------------------- /docs/assets/instagram_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/instagram_profile_image.png -------------------------------------------------------------------------------- /docs/assets/linkedin_banner_image_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/linkedin_banner_image_1.png -------------------------------------------------------------------------------- /docs/assets/linkedin_banner_image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/linkedin_banner_image_2.png -------------------------------------------------------------------------------- /docs/assets/linkedin_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/linkedin_profile_image.png -------------------------------------------------------------------------------- /docs/assets/pinterest_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/pinterest_profile_image.png -------------------------------------------------------------------------------- /docs/assets/twitter_header_photo_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/twitter_header_photo_1.png -------------------------------------------------------------------------------- /docs/assets/twitter_header_photo_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/twitter_header_photo_2.png -------------------------------------------------------------------------------- /docs/docs/img/a716fd45ly1fyb87jlpjyj20sg0sgn7f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/docs/img/a716fd45ly1fyb87jlpjyj20sg0sgn7f.jpg -------------------------------------------------------------------------------- /kernel/network/include/net.h: -------------------------------------------------------------------------------- 1 | #ifndef __CENO_NET_NET_H__ 2 | #define __CENO_NET_NET_H__ 3 | 4 | typedef struct connection{ 5 | 6 | }connection_t; 7 | 8 | 9 | #endif // ! __CENO_NET_NET_H__ -------------------------------------------------------------------------------- /docs/assets/DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CenoOS/CenoOS-IOT/HEAD/docs/assets/DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .pio/ 2 | .pioenvs/ 3 | .piolibdeps/ 4 | .vscode/.browse.c_cpp.db* 5 | .vscode/c_cpp_properties.json 6 | .vscode/launch.json 7 | .vscode/ 8 | docs/paper/ 9 | docs/slide/ 10 | lib/ 11 | 12 | 13 | -------------------------------------------------------------------------------- /kernel/ceno/include/common.h: -------------------------------------------------------------------------------- 1 | #ifdef __CENO_RTOS_OS_COMMON_H__ 2 | #define __CENO_RTOS_OS_COMMON_H__ 3 | 4 | static unsigned long int next = 1; 5 | 6 | int rand(void) // RAND_MAX assumed to be 32767 7 | { 8 | next = next * 1103515245 + 12345; 9 | return (unsigned int)(next/65536) % 32768; 10 | } 11 | 12 | void srand(unsigned int seed) 13 | { 14 | next = seed; 15 | } 16 | #endif -------------------------------------------------------------------------------- /user/obj/interrupt.d: -------------------------------------------------------------------------------- 1 | obj/interrupt.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/interrupt.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/interrupt.h \ 4 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/bsp.h 6 | -------------------------------------------------------------------------------- /user/optimize/interrupt.d: -------------------------------------------------------------------------------- 1 | interrupt.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/interrupt.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/interrupt.h \ 4 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/bsp.h 6 | -------------------------------------------------------------------------------- /docs/docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | ![logo](/img/logo_.png) 2 | 3 | 4 | > CenoOS is a real time operating system for IOT devices from cenocloud. 5 | 6 | * MQTT SUPPORT 7 | * CenoCloud SDK SUPPORT 8 | * Real Time Kernel 9 | 10 | [GitHub](https://github.com/CenoOS/CenoOS) 11 | [Get Started](#quick-start) 12 | 13 | 14 | ![color](#0248E8) -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/bsp.h: -------------------------------------------------------------------------------- 1 | #ifndef __CENO_RTOS_BSP_H__ 2 | #define __CENO_RTOS_BSP_H__ 3 | 4 | void bsp_init(void); 5 | void enable_irq(void); 6 | void disable_irq(void); 7 | 8 | void light_red_on(void); 9 | void light_green_on(void); 10 | void light_blue_on(void); 11 | 12 | void light_red_off(void); 13 | void light_green_off(void); 14 | void light_blue_off(void); 15 | 16 | typedef long clock_t; 17 | extern volatile clock_t* l_tickCtr; 18 | 19 | void system_init(void); 20 | void delay_block(clock_t tick); 21 | 22 | #endif -------------------------------------------------------------------------------- /kernel/ceno/include/os_mutex.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Ceno RTOS mutex 3 | * 4 | * 2018-12-17 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | */ 13 | 14 | 15 | #ifndef __CENO_RTOS_MUTEX_H__ 16 | #define __CENO_RTOS_MUTEX_H__ 17 | 18 | typedef struct os_mutex{ 19 | os_obj_t obj; 20 | os_task_t *mutexTask; 21 | struct os_mutex *mutexList; 22 | 23 | }os_mutex_t; 24 | 25 | os_err_t os_mutex_create(os_mutex_t mutex, cpu_char_t cpu); 26 | 27 | #endif //! __CENO_RTOS_MUTEX_H__ -------------------------------------------------------------------------------- /kernel/ceno/src/os_obj.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Ceno RTOS task 3 | * 4 | * 2019-1-11 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | */ 13 | #include "../include/os_api.h" 14 | 15 | 16 | /** 17 | * objects container 18 | **/ 19 | os_obj_list_t objs_container; 20 | 21 | os_err_t os_obj_container_init(){ 22 | /* init objects container */ 23 | os_list_t taskList; 24 | os_err_t isListInit = os_list_init(&taskList); 25 | if(isListInit==OS_ERR){ 26 | return isListInit; 27 | } 28 | 29 | objs_container.taskHead = taskList; 30 | } -------------------------------------------------------------------------------- /kernel/ceno/include/os_kernel.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno RTOS task 3 | * 4 | * 2018-12-17 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | 15 | #ifndef __CENO_RTOS_KERNEL_H__ 16 | #define __CENO_RTOS_KERNEL_H__ 17 | 18 | os_err_t os_init(void); 19 | 20 | os_err_t os_run(void); 21 | 22 | void task_idle_thread(void); 23 | os_err_t os_idle(void); 24 | 25 | os_err_t os_tick(void); 26 | 27 | os_err_t os_sched(void); 28 | 29 | 30 | extern volatile os_task_t osIdleTask; 31 | 32 | #endif -------------------------------------------------------------------------------- /user/include/os_config.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-14 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_CONFIG_H__ 15 | #define __CENO_RTOS_CONFIG_H__ 16 | 17 | #define __CENO_RTOS_CONFIG_MUTEX_ON__ 18 | #define __CENO_RTOS_CONFIG_SEM_ON__ 19 | #define __CENO_RTOS_CONFIG_QUEUE_ON__ 20 | #define __CENO_RTOS_CONFIG_RING_BUFFER_ON__ 21 | 22 | #define __CENO_RTOS_UART_DEBUG_ON__ 23 | 24 | #endif // ! __CENO_RTOS_CONFIG_H__ 25 | 26 | -------------------------------------------------------------------------------- /kernel/network/mqtt/src/mqtt.c: -------------------------------------------------------------------------------- 1 | #include "../../include/net.h" 2 | #include "../include/mqtt.h" 3 | 4 | int mqtt_packetid(connection_t *nc){ 5 | 6 | } 7 | 8 | int mqtt_connect(connection_t *nc, mqtt_connect_opt_t *options){ 9 | 10 | } 11 | 12 | int mqtt_publish(connection_t *nc, mqtt_publish_opt_t *options){ 13 | 14 | } 15 | 16 | int mqtt_subscribe(connection_t *nc, mqtt_subscribe_opt_t *options, mqtt_msg_handler *cbs){ 17 | 18 | } 19 | 20 | int mqtt_puback(connection_t *nc, mqtt_puback_opt_t *options){ 21 | 22 | } 23 | 24 | int mqtt_ping(connection_t *nc){ 25 | 26 | } 27 | 28 | int mqtt_unsubscribe(connection_t *nc, mqtt_unsubscribe_opt_t *options){ 29 | 30 | } 31 | 32 | void mqtt_event_handler(connection_t *nc, int event, void *event_data){ 33 | 34 | } 35 | 36 | -------------------------------------------------------------------------------- /user/obj/startup.d: -------------------------------------------------------------------------------- 1 | obj/startup.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/startup.c \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/startup.h 11 | -------------------------------------------------------------------------------- /user/optimize/startup.d: -------------------------------------------------------------------------------- 1 | startup.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/startup.c \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/startup.h 11 | -------------------------------------------------------------------------------- /kernel/ceno/include/os_api.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-14 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_OS_API_H__ 15 | #define __CENO_RTOS_OS_API_H__ 16 | 17 | #include 18 | 19 | #include "uart_debug.h" 20 | 21 | #include "os.h" 22 | #include "os_heap.h" 23 | #include "os_list.h" 24 | #include "os_obj.h" 25 | #include "os_queue.h" 26 | #include "os_task.h" 27 | #include "os_semphore.h" 28 | #include "os_mutex.h" 29 | #include "os_kernel.h" 30 | 31 | 32 | #endif //! __CENO_RTOS_OS_API_H__ -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2019-01-27 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_UART_DEBUG__ 15 | #define __CENO_RTOS_UART_DEBUG__ 16 | 17 | void uart_debug_init(void); 18 | 19 | void uart_debug_print(char* str); 20 | 21 | void uart_debug_print_char(char c); 22 | 23 | void uart_debug_print_i32(unsigned int v,unsigned int mode); 24 | 25 | char uart_debug_reveive_char(void); 26 | 27 | void uart_debug_print_os_register(); 28 | 29 | #endif //! __CENO_RTOS_UART_DEBUG__ 30 | -------------------------------------------------------------------------------- /kernel/ceno/src/os_list.c: -------------------------------------------------------------------------------- 1 | #include "../include/os_api.h" 2 | 3 | os_err_t os_list_init(os_list_t* head){ 4 | head->next = head; 5 | head->prev = head; 6 | } 7 | 8 | uint8_t is_list_empty(os_list_t*list){ 9 | return (list->next==list); 10 | } 11 | 12 | os_err_t os_list_insert(os_list_t* head, os_list_t* elem){ 13 | elem->prev = head->prev; 14 | elem->next = head; 15 | 16 | head->prev->next = elem; 17 | head->prev= elem; 18 | } 19 | 20 | os_err_t os_list_add(os_list_t* head, os_list_t* elem){ 21 | elem->prev = head; 22 | elem->next = head->next; 23 | 24 | head->next->prev = elem; 25 | head->next = elem; 26 | } 27 | 28 | os_err_t os_list_rm(os_list_t* elem){ 29 | elem->prev->next = elem->next; 30 | elem->next->prev = elem->prev; 31 | } 32 | 33 | os_err_t os_list_rm_init(os_list_t* elem){ 34 | elem->prev->next = elem->next; 35 | elem->next->prev = elem->prev; 36 | 37 | elem->next = elem->prev = elem; 38 | } -------------------------------------------------------------------------------- /kernel/ceno/include/os_list.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-14 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_LIST_H__ 15 | #define __CENO_RTOS_LIST_H__ 16 | 17 | typedef struct os_list{ 18 | struct os_list* next; 19 | struct os_list* prev; 20 | }os_list_t; 21 | 22 | os_err_t os_list_init(os_list_t* listHead); 23 | 24 | uint8_t os_list_empty(os_list_t*list); 25 | 26 | os_err_t os_list_insert(os_list_t* head, os_list_t* elem); 27 | 28 | os_err_t os_list_add(os_list_t* head, os_list_t* elem); 29 | 30 | os_err_t os_list_rm(os_list_t* elem); 31 | 32 | os_err_t os_list_rm_init(os_list_t* elem); 33 | 34 | #endif // !__CENO_RTOS_LIST_H__ -------------------------------------------------------------------------------- /user/src/main.c: -------------------------------------------------------------------------------- 1 | #include "bsp.h" 2 | #include "os_api.h" 3 | 4 | os_task_t task_01; 5 | uint32_t stack_task_01[40]; 6 | void task_01_thread(){ 7 | while(1){ 8 | uart_debug_print("[task] task 1 \n\r"); 9 | } 10 | } 11 | 12 | os_task_t task_02; 13 | uint32_t stack_task_02[40]; 14 | void task_02_thread(){ 15 | while(1){ 16 | uart_debug_print("[task] task 2 \n\r"); 17 | } 18 | } 19 | 20 | int main(void) 21 | { 22 | 23 | bsp_init(); 24 | 25 | uart_debug_print("[debug] _______________begin______________\n\r"); 26 | uart_debug_print("[main] main start.\n\r"); 27 | 28 | os_init(); 29 | 30 | os_err_t task_01_err = os_task_create( 31 | &task_01, 32 | "task_01", 33 | 5, 34 | &stack_task_01, 35 | sizeof(stack_task_01), 36 | &task_01_thread 37 | ); 38 | 39 | os_err_t task_02_err = os_task_create( 40 | &task_02, 41 | "task_02", 42 | 4, 43 | &stack_task_02, 44 | sizeof(stack_task_02), 45 | &task_02_thread 46 | ); 47 | 48 | os_run(); 49 | } 50 | 51 | 52 | -------------------------------------------------------------------------------- /kernel/ceno/include/os.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-14 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_OS_H__ 15 | #define __CENO_RTOS_OS_H__ 16 | 17 | #define NULL ((void*)0) 18 | #define TRUE 1 19 | #define FALSE 0 20 | 21 | 22 | typedef unsigned int os_task_id_t; 23 | typedef unsigned int os_time_t; 24 | 25 | typedef enum os_err{ 26 | OS_ERR = 1, 27 | OS_ERR_NONE = 0 28 | }os_err_t; 29 | 30 | typedef void* cpu_stk_t; 31 | typedef unsigned int cpu_stk_size_t; 32 | typedef char cpu_char_t; 33 | 34 | typedef unsigned int os_size_t; 35 | 36 | typedef unsigned int priority_t; 37 | 38 | 39 | typedef unsigned int queue_size_t; 40 | #define MAX_QUEUE_SIZE 256 41 | 42 | 43 | typedef unsigned int sem_count_t; 44 | 45 | typedef unsigned int tick_t; 46 | 47 | typedef long clock_t; 48 | 49 | 50 | #endif //! __CENO_RTOS_OS_H__ -------------------------------------------------------------------------------- /kernel/ceno/include/os_semphore.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-19 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_SEMPHORE_H__ 15 | #define __CENO_RTOS_SEMPHORE_H__ 16 | 17 | typedef struct os_semphore{ 18 | os_obj_t obj; 19 | sem_count_t count; 20 | sem_count_t peakCount; 21 | os_queue_t blockTasks; 22 | os_list_t semList; 23 | }os_semphore_t; 24 | 25 | 26 | 27 | os_err_t os_sem_create(os_semphore_t* sem, const cpu_char_t *name, sem_count_t count); 28 | 29 | os_err_t os_sem_del(os_semphore_t* sem); 30 | 31 | os_err_t os_sem_give(os_semphore_t* sem); 32 | 33 | os_err_t os_sem_take(os_semphore_t* sem, tick_t ticks); 34 | 35 | os_err_t os_sem_count_get(os_semphore_t* sem, sem_count_t* count); 36 | 37 | os_err_t os_sem_count_set(os_semphore_t* sem, sem_count_t count); 38 | 39 | #endif // ! __CENO_RTOS_SEMPHORE_H__ 40 | 41 | 42 | # -------------------------------------------------------------------------------- /kernel/ceno/include/os_queue.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-14 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_QUEUE_H__ 15 | #define __CENO_RTOS_QUEUE_H__ 16 | 17 | typedef struct os_queue{ 18 | os_obj_t obj; 19 | 20 | uint32_t size; 21 | uint32_t front; 22 | uint32_t rear; 23 | 24 | uint32_t* elems; 25 | }os_queue_t; 26 | 27 | 28 | os_err_t os_queue_create(os_queue_t* me, const cpu_char_t* name, uint32_t size); 29 | 30 | os_err_t os_queue_item_en(os_queue_t* queue, uint32_t* itemPtr); 31 | os_err_t os_queue_item_de(os_queue_t* queue, uint32_t* itemPtr); 32 | 33 | os_err_t os_queue_clear(os_queue_t* queue); 34 | 35 | uint32_t os_queue_length(os_queue_t* queue); 36 | 37 | uint32_t os_queue_is_empty(os_queue_t* queue); 38 | uint32_t os_queue_is_full(os_queue_t* queue); 39 | 40 | uint32_t os_queue_traverse(os_queue_t* queue); 41 | 42 | 43 | 44 | 45 | #endif // !__CENO_RTOS_QUEUE_H__ -------------------------------------------------------------------------------- /kernel/ceno/include/os_heap.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2019-01-06 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_OS_MM_HEAP_H__ 15 | #define __CENO_RTOS_OS_MM_HEAP_H__ 16 | 17 | 18 | //stack pointer 19 | extern uint32_t _stack_ptr; 20 | //.text/code,stored in Flash 21 | extern uint32_t _etext; 22 | //.data,copied into RAM on boot 23 | extern uint32_t _data; 24 | extern uint32_t _edata; 25 | //.bss,unitialized variables 26 | extern uint32_t _bss; 27 | extern uint32_t _ebss; 28 | 29 | typedef struct os_heap_block os_heap_block_t; 30 | struct os_heap_block{ 31 | os_size_t size; 32 | os_heap_block_t* next; 33 | os_heap_block_t* prior; 34 | }; 35 | 36 | 37 | os_err_t os_heap_init(); 38 | os_heap_block_t* os_heap_find_block(os_size_t size); 39 | void* os_heap_malloc(os_size_t size); 40 | void* os_heap_realloc (void* ptr, os_size_t newSize); 41 | uint32_t os_heap_free(void* ptr); 42 | 43 | void* os_heap_calloc (os_size_t num, os_size_t size); 44 | 45 | 46 | 47 | 48 | 49 | #endif //! __CENO_RTOS_OS_MM_HEAP_H__ -------------------------------------------------------------------------------- /kernel/ceno/include/os_obj.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2018-12-19 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #ifndef __CENO_RTOS_OBJ_H__ 15 | #define __CENO_RTOS_OBJ_H__ 16 | 17 | typedef enum obj_type{ 18 | OS_OBJ_TYPE_NONE = 0, 19 | OS_OBJ_TASK_TYPE, 20 | OS_OBJ_SEM_TYPE, 21 | OS_OBJ_MUTEX_TYPE, 22 | OS_OBJ_QUEUE_TYPE, 23 | OS_OBJ_BUFFER_TYPE, 24 | }obj_type_t; 25 | 26 | typedef struct os_obj{ 27 | os_list_t list; 28 | const cpu_char_t* name; 29 | obj_type_t objType; 30 | }os_obj_t; 31 | 32 | typedef struct os_obj_list{ 33 | os_list_t taskHead; 34 | 35 | #ifdef __CENO_RTOS_CONFIG_MUTEX_ON__ 36 | os_list_t mutexHead; 37 | #endif 38 | 39 | #ifdef __CENO_RTOS_CONFIG_SEM_ON__ 40 | os_list_t semHead; 41 | #endif 42 | 43 | #ifdef __CENO_RTOS_CONFIG_QUEUE_ON__ 44 | os_list_t queueHead; 45 | #endif 46 | 47 | #ifdef __CENO_RTOS_CONFIG_RING_BUFFER_ON__ 48 | os_list_t bufferHead; 49 | #endif 50 | }os_obj_list_t; 51 | 52 | 53 | os_err_t os_obj_container_init(void); 54 | 55 | #endif // !__CENO_RTOS_OBJ_H__ 56 | -------------------------------------------------------------------------------- /user/asm/os_obj.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "os_obj.c" 12 | .text 13 | .comm objs_container,8,4 14 | .align 2 15 | .global os_obj_container_init 16 | .syntax unified 17 | .arm 18 | .fpu softvfp 19 | .type os_obj_container_init, %function 20 | os_obj_container_init: 21 | @ Function supports interworking. 22 | @ args = 0, pretend = 0, frame = 16 23 | @ frame_needed = 1, uses_anonymous_args = 0 24 | push {fp, lr} 25 | add fp, sp, #4 26 | sub sp, sp, #16 27 | sub r3, fp, #16 28 | mov r0, r3 29 | bl os_list_init 30 | mov r3, r0 31 | strb r3, [fp, #-5] 32 | ldrb r3, [fp, #-5] @ zero_extendqisi2 33 | cmp r3, #1 34 | bne .L2 35 | ldrb r3, [fp, #-5] @ zero_extendqisi2 36 | b .L1 37 | .L2: 38 | ldr r3, .L4 39 | mov r2, r3 40 | sub r3, fp, #16 41 | ldm r3, {r0, r1} 42 | stm r2, {r0, r1} 43 | .L1: 44 | mov r0, r3 45 | sub sp, fp, #4 46 | @ sp needed 47 | pop {fp, lr} 48 | bx lr 49 | .L5: 50 | .align 2 51 | .L4: 52 | .word objs_container 53 | .size os_obj_container_init, .-os_obj_container_init 54 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 55 | -------------------------------------------------------------------------------- /docs/docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /user/obj/main.d: -------------------------------------------------------------------------------- 1 | obj/main.o: src/main.c \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/bsp.h \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/optimize/main.d: -------------------------------------------------------------------------------- 1 | main.o: src/main.c \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/bsp.h \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/include/os_kernel.h 21 | -------------------------------------------------------------------------------- /kernel/ceno/include/os_task.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Ceno RTOS task 3 | * 4 | * 2018-12-17 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | */ 13 | #ifndef __CENO_RTOS_TASK_H__ 14 | #define __CENO_RTOS_TASK_H__ 15 | 16 | typedef os_err_t (*os_task_handler_t)(); 17 | 18 | typedef enum task_state{ 19 | OS_STATE_DORMANT = 1, 20 | OS_STATE_READY = 2, 21 | OS_STATE_BLOCKED = 3, 22 | OS_STATE_RUNNING = 5, 23 | OS_STATE_PENDING = 4, 24 | OS_STATE_INTERRUPTED = 4 25 | }task_state_t; 26 | 27 | typedef struct os_task{ 28 | cpu_stk_t sp; 29 | cpu_stk_size_t stackSize; 30 | os_task_handler_t taskHandler; 31 | os_task_id_t id; 32 | os_obj_t obj; 33 | task_state_t state; 34 | os_time_t timeout; 35 | priority_t priority; 36 | os_list_t taskList; 37 | }os_task_t; 38 | 39 | 40 | 41 | os_err_t os_task_create(os_task_t *me, 42 | cpu_char_t *name, 43 | priority_t priority, 44 | cpu_stk_t stkSto, 45 | cpu_stk_size_t stackSize, 46 | os_task_handler_t taskHandler); 47 | 48 | os_err_t os_task_switch_next(void); 49 | 50 | os_err_t os_task_switch_context(os_task_t *next); 51 | 52 | os_err_t os_task_exit(void); 53 | 54 | void delay(clock_t tick); 55 | 56 | extern os_queue_t osTaskQueue; 57 | 58 | extern os_task_t * volatile osTaskCurr; 59 | extern os_task_t * volatile osTaskNext; 60 | #endif // !__CENO_RTOS_TASK_H__ 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /user/obj/os_obj.d: -------------------------------------------------------------------------------- 1 | obj/os_obj.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_obj.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/optimize/os_heap.d: -------------------------------------------------------------------------------- 1 | os_heap.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_heap.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/optimize/os_list.d: -------------------------------------------------------------------------------- 1 | os_list.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_list.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/optimize/os_obj.d: -------------------------------------------------------------------------------- 1 | os_obj.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_obj.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/optimize/os_task.d: -------------------------------------------------------------------------------- 1 | os_task.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_task.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/optimize/os_queue.d: -------------------------------------------------------------------------------- 1 | os_queue.o: /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_queue.c \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 11 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 20 | -------------------------------------------------------------------------------- /user/obj/os_heap.d: -------------------------------------------------------------------------------- 1 | obj/os_heap.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_heap.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/obj/os_list.d: -------------------------------------------------------------------------------- 1 | obj/os_list.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_list.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/obj/os_queue.d: -------------------------------------------------------------------------------- 1 | obj/os_queue.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_queue.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/obj/os_task.d: -------------------------------------------------------------------------------- 1 | obj/os_task.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_task.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/obj/os_kernel.d: -------------------------------------------------------------------------------- 1 | obj/os_kernel.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_kernel.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/optimize/os_kernel.d: -------------------------------------------------------------------------------- 1 | os_kernel.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_kernel.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/obj/os_semphore.d: -------------------------------------------------------------------------------- 1 | obj/os_semphore.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_semphore.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /user/optimize/os_semphore.d: -------------------------------------------------------------------------------- 1 | os_semphore.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_semphore.c \ 3 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_api.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/uart_debug.h \ 12 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os.h \ 13 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_heap.h \ 14 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_list.h \ 15 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_obj.h \ 16 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_queue.h \ 17 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_task.h \ 18 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_semphore.h \ 19 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_mutex.h \ 20 | /Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/../include/os_kernel.h 21 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/bsp.c: -------------------------------------------------------------------------------- 1 | #include "../include/bsp.h" 2 | #include "../include/uart_debug.h" 3 | #include "TM4C123GH6PM.h" 4 | 5 | #define BSP_TICKS_PER_SEC 1 6 | static clock_t tickCtr = 0; 7 | volatile clock_t* l_tickCtr = &tickCtr; 8 | 9 | void os_on_startup(void){ 10 | SystemCoreClockUpdate(); 11 | SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); 12 | /* set the SysTick interrupt priority (highest) */ 13 | NVIC_SetPriority(SysTick_IRQn, 0U); 14 | enable_irq(); 15 | } 16 | 17 | void disable_irq(void){ 18 | __asm ( 19 | "CPSID I\n\t" 20 | ); 21 | } 22 | 23 | void enable_irq(void){ 24 | __asm ( 25 | "CPSIE I\n\t" 26 | ); 27 | } 28 | 29 | int volatile counter = 0; 30 | 31 | void delay_block(clock_t tick){ 32 | *l_tickCtr = tick; 33 | while((*l_tickCtr)>0); 34 | } 35 | 36 | 37 | 38 | void bsp_init(void){ 39 | SYSCTL->RCGCGPIO |= (1<<5); // enable clock on PortF 40 | GPIOF->DIR = (1<<1) | (1<<2) | (1<<3); // make LED Pins PF1, PF2, PF3 outputs 41 | GPIOF->DEN = (1<<1) | (1<<2) | (1<<3); // enable degital function on LED pins; 42 | GPIOF->DATA &= ~((1<<1) | (1<<2) | (1<<3)); // turn off leds 43 | uart_debug_init(); 44 | disable_irq(); 45 | } 46 | 47 | void light_red_on(void){ 48 | GPIOF->DATA = (1<<1); 49 | } 50 | void light_green_on(void){ 51 | GPIOF->DATA = (1<<3); 52 | } 53 | void light_blue_on(void){ 54 | GPIOF->DATA = (1<<2); 55 | } 56 | 57 | void light_red_off(void){ 58 | GPIOF->DATA &= ~(1<<1); 59 | } 60 | void light_green_off(void){ 61 | GPIOF->DATA &= ~(1<<3); 62 | } 63 | void light_blue_off(void){ 64 | GPIOF->DATA &= ~(1<<2); 65 | } -------------------------------------------------------------------------------- /user/obj/system_TM4C123GH6PM.d: -------------------------------------------------------------------------------- 1 | obj/system_TM4C123GH6PM.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/system_TM4C123GH6PM.c \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/TM4C123GH6PM.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 12 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 13 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../include/system_TM4C123GH6PM.h 17 | -------------------------------------------------------------------------------- /user/optimize/system_TM4C123GH6PM.d: -------------------------------------------------------------------------------- 1 | system_TM4C123GH6PM.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/system_TM4C123GH6PM.c \ 3 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 4 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 5 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 10 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/TM4C123GH6PM.h \ 11 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 12 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 13 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/../include/../include/system_TM4C123GH6PM.h 17 | -------------------------------------------------------------------------------- /user/obj/uart_debug.d: -------------------------------------------------------------------------------- 1 | obj/uart_debug.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/uart_debug.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/uart_debug.h \ 4 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/TM4C123GH6PM.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 11 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 12 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 13 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 17 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../include/system_TM4C123GH6PM.h \ 18 | include/os_config.h 19 | -------------------------------------------------------------------------------- /user/optimize/uart_debug.d: -------------------------------------------------------------------------------- 1 | uart_debug.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/uart_debug.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/uart_debug.h \ 4 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/TM4C123GH6PM.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 6 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 11 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 12 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 13 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 17 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../include/system_TM4C123GH6PM.h \ 18 | include/os_config.h 19 | -------------------------------------------------------------------------------- /kernel/ceno/src/os_semphore.c: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2019-01-06 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * nerosoft@outlook.com 12 | * https://www.cenocloud.com 13 | ****************************************************/ 14 | #include "../include/os_api.h" 15 | 16 | #define DEFAULT_BLOCK_QUEUE_SIZE 10 17 | 18 | 19 | os_err_t os_sem_create(os_semphore_t* sem, const cpu_char_t *name, sem_count_t count){ 20 | 21 | if(count == 0U){ // count must bigger than 0 22 | return OS_ERR; 23 | } 24 | 25 | if(name == (void*)0){ // is name null? 26 | return OS_ERR; 27 | } 28 | 29 | os_obj_t obj; 30 | obj.objType = OS_OBJ_SEM_TYPE; 31 | obj.name = name; 32 | 33 | sem->obj = obj; 34 | sem->count = count; 35 | 36 | return os_queue_create(&sem->blockTasks, name, (uint32_t)DEFAULT_BLOCK_QUEUE_SIZE); 37 | } 38 | 39 | os_err_t os_sem_del(os_semphore_t* sem){ 40 | __DISABLE_IRQ(); 41 | 42 | if(sem->count>0){ 43 | sem->count--; 44 | }else{ 45 | os_task_t* currentTask; 46 | currentTask->state = OS_STATE_BLOCKED; 47 | os_queue_add_item(&sem->blockTasks,currentTask); 48 | } 49 | 50 | __ENABLE_IRQ(); 51 | } 52 | 53 | os_err_t os_sem_give(os_semphore_t* sem){ 54 | __DISABLE_IRQ(); 55 | 56 | __ENABLE_IRQ(); 57 | } 58 | 59 | os_err_t os_sem_take(os_semphore_t* sem, tick_t ticks){ 60 | __DISABLE_IRQ(); 61 | 62 | __ENABLE_IRQ(); 63 | } 64 | 65 | os_err_t os_sem_count_get(os_semphore_t* sem, sem_count_t* count){ 66 | count = &sem->count; 67 | } 68 | 69 | os_err_t os_sem_count_set(os_semphore_t* sem, sem_count_t count){ 70 | __DISABLE_IRQ(); 71 | sem->count = count; 72 | __ENABLE_IRQ(); 73 | 74 | } -------------------------------------------------------------------------------- /user/obj/bsp.d: -------------------------------------------------------------------------------- 1 | obj/bsp.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/bsp.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/bsp.h \ 4 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/uart_debug.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/TM4C123GH6PM.h \ 6 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 11 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 12 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 13 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 17 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 18 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../include/system_TM4C123GH6PM.h 19 | -------------------------------------------------------------------------------- /user/optimize/bsp.d: -------------------------------------------------------------------------------- 1 | bsp.o: \ 2 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/bsp.c \ 3 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/bsp.h \ 4 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/../include/uart_debug.h \ 5 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/TM4C123GH6PM.h \ 6 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/core_cm4.h \ 7 | /Users/neroyang/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/7.3.1/include/stdint.h \ 8 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/stdint.h \ 9 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/machine/_default_types.h \ 10 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/features.h \ 11 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/_newlib_version.h \ 12 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_intsup.h \ 13 | /Users/neroyang/gcc-arm-none-eabi/arm-none-eabi/include/sys/_stdint.h \ 14 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_version.h \ 15 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_compiler.h \ 16 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/cmsis_gcc.h \ 17 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../../../../../../lib/CMSIS/Include/mpu_armv7.h \ 18 | /Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/../include/system_TM4C123GH6PM.h 19 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ld/link.ld: -------------------------------------------------------------------------------- 1 | MEMORY 2 | { 3 | FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K /* FLASH size 256KB */ 4 | RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 32K /* RAM size 32KB */ 5 | 6 | } 7 | 8 | SECTIONS 9 | { 10 | /* 11 | * initial stack pointer pointing to top of stack,starts from higher addresses 12 | * i.e ORIGIN(RAM) + LENGTH(RAM)-1 in this case 0x20007FFF to lower addesses i.e 13 | * those lesser than 0x20007FFF to 0x2000000,which is the origina address of RAM, 14 | * until it comes in contact with .bss or .data in which case a buffer overflow occurs 15 | */ 16 | PROVIDE( _stack_ptr = ORIGIN(RAM) + LENGTH(RAM)); 17 | /* constants and other code stored in FLASH */ 18 | .text : 19 | { 20 | _text = .; /* beginning of .text segment,also called code memory */ 21 | KEEP(*(.vector_table)) /* vector table defined in startup.c to be included */ 22 | *(.text*) /* other code */ 23 | *(.rodata*) /* constants go here */ 24 | _etext = .; /* end of .text segment */ 25 | } > FLASH 26 | 27 | /* data, initialized variables, to be copied to RAM upon by startup.c */ 28 | .data : 29 | { 30 | _data = .; /* beginning of .data segment */ 31 | *(.data*) /* data goes here */ 32 | _edata = .; /* end of .data segment */ 33 | } > RAM AT >FLASH /* .data segment starts directly after the .text section in FLASH */ 34 | 35 | /* uninitialized data which is initialized to 0 upon by startup.c */ 36 | .bss : 37 | { 38 | _bss = .; /* beginning of .bss segment */ 39 | *(.bss*) /* .bss content goes here */ 40 | *(COMMON) 41 | _ebss = .; /* end of .bss segment */ 42 | } > RAM 43 | } -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/system_TM4C123GH6PM.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************//** 2 | * @file system_TM4C123GH6PM.h 3 | * @brief CMSIS Cortex-M4 Device Peripheral Access Layer Header File for 4 | * TI Tiva TM4C123 Class Devices 5 | * @version V3.1 6 | * @date 15. May 2013 7 | * 8 | * @note 9 | * Copyright (C) 2010-2011 ARM Limited. All rights reserved. 10 | * 11 | * @par 12 | * ARM Limited (ARM) is supplying this software for use with Cortex-M 13 | * processor based microcontrollers. This file can be freely distributed 14 | * within development tools that are supporting such ARM based processors. 15 | * 16 | * @par 17 | * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED 18 | * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF 19 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. 20 | * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR 21 | * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. 22 | ******************************************************************************/ 23 | 24 | 25 | #ifndef SYSTEM_TM4C123_H 26 | #define SYSTEM_TM4C123_H 27 | 28 | #include 29 | 30 | #ifdef __cplusplus 31 | extern "C" { 32 | #endif 33 | 34 | extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ 35 | 36 | 37 | /** 38 | * Initialize the system 39 | * 40 | * @param none 41 | * @return none 42 | * 43 | * @brief Setup the microcontroller system. 44 | * Initialize the System and update the SystemCoreClock variable. 45 | */ 46 | extern void SystemInit (void); 47 | 48 | /** 49 | * Update SystemCoreClock variable 50 | * 51 | * @param none 52 | * @return none 53 | * 54 | * @brief Updates the SystemCoreClock with current core Clock 55 | * retrieved from cpu registers. 56 | */ 57 | extern void SystemCoreClockUpdate (void); 58 | 59 | #ifdef __cplusplus 60 | } 61 | #endif 62 | 63 | #endif /* SYSTEM_TM4C123_H */ 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |

6 | 7 |

CenoOS-IOT

8 | 9 |
10 | CenoOS is a real time operating system for IOT devices from cenocloud. 11 | 12 | [![open issues](https://img.shields.io/github/issues/badges/shields.svg?style=flat-square)](https://github.com/CenoOS/CenoOS-IOT/issues) 13 | [![closed issues](https://img.shields.io/github/issues-closed/badges/shields.svg?style=flat-square)](https://github.com/CenoOS/CenoOS-IOT/issues) 14 | [![Discord](https://img.shields.io/discord/534285557157855232.svg?style=flat-square)](https://discordapp.com/channels/534285557157855232/534285557157855234) 15 |
16 | 17 | # Docuemnt 18 | 19 | ## Architecture Overview 20 | 21 |

22 | 23 | 24 | 25 |

26 | 27 | ## Prepare 28 | 29 | ### 开发板 30 | 在根目录/conf/makefile.conf中修改如下配置: 31 | ```makefile 32 | # 开发板支持 33 | ARCH=arm32 34 | BOARD=ek-TM4C123gxl 35 | MCU=TM4C123GH6PM 36 | LINK_FILE=link.ld 37 | OCD_CFG_FILE=ek-tm4c123gxl.cfg 38 | ``` 39 | 其中选项对应board下支持的开发版 40 | 41 | ### 配置OPENOCD 42 | 43 | ```makefile 44 | OPENOCD_SCRIPT_DIR=/usr/local/share/openocd/scripts/board 45 | ``` 46 | 47 | ### 配置项目 48 | 49 | ```makefile 50 | BASE_DIR=/Users/neroyang/project/Ceno-RTOS 51 | 52 | ``` 53 | 54 | ### 构建 55 | 56 | #### OPENOCD启动 57 | 58 | ```bash 59 | cd user 60 | make openOCD_connect 61 | ``` 62 | 63 | #### 构建 64 | 65 | ```bash 66 | make all 67 | ``` 68 | 69 | #### 烧写 70 | 71 | ```bash 72 | make flash 73 | ``` 74 | 75 | ### 写在最后 76 | have a good trial! 77 | 78 | # Community 79 | discord 80 | 81 | twitch 82 | 83 | # License 84 | CenoOS is released under the Apache 2.0 license 85 | 86 | 87 | [![Let's fund issues in this repository](https://issuehunt.io/static/embed/issuehunt-button-v1.svg)](https://issuehunt.io/repos/157975898) 88 | 89 | ![CenoOS](https://raw.githubusercontent.com/CenoOS/Ceno-RTOS/master/docs/assets/twitter_header_photo_1.png) -------------------------------------------------------------------------------- /kernel/ceno/src/os_queue.c: -------------------------------------------------------------------------------- 1 | #include "../include/os_api.h" 2 | 3 | os_err_t os_queue_create(os_queue_t* me, const cpu_char_t* name, uint32_t size){ 4 | uart_debug_print("[queue] queue create : "); 5 | uart_debug_print(name); 6 | uart_debug_print("\n\r"); 7 | if(size==0U){ 8 | return OS_ERR; 9 | } 10 | 11 | me->elems = (uint32_t*)os_heap_malloc(size*sizeof(uint32_t)); 12 | if(!me->elems){ 13 | uart_debug_print("[queue] queue create : heap malloc failed!\n\r"); 14 | return OS_ERR; 15 | } 16 | os_obj_t obj; 17 | obj.name = name; 18 | obj.objType = OS_OBJ_QUEUE_TYPE; 19 | me->obj = obj; 20 | me->front = 0; 21 | me->rear = 0; 22 | me->size = size; 23 | 24 | return OS_ERR_NONE; 25 | } 26 | 27 | os_err_t os_queue_item_en(os_queue_t* queue, uint32_t* itemPtr){ 28 | if(os_queue_is_full(queue)==TRUE){ 29 | uart_debug_print("[queue] queue en : queue is full!\n\r"); 30 | return OS_ERR; 31 | } 32 | queue->elems[queue->rear] = itemPtr; 33 | queue->rear = (queue->rear + 1) % queue->size; 34 | 35 | return OS_ERR_NONE; 36 | } 37 | 38 | os_err_t os_queue_item_de(os_queue_t* queue, uint32_t* itemPtr){ 39 | if(os_queue_is_empty(queue) == TRUE){ 40 | uart_debug_print("[queue] queue de : queue is empty!\n\r"); 41 | return OS_ERR; 42 | } 43 | *itemPtr = queue->elems[queue->front]; 44 | queue->front = (queue->front + 1) % queue->size; 45 | 46 | return OS_ERR_NONE; 47 | } 48 | 49 | uint32_t os_queue_traverse(os_queue_t* queue){ 50 | uint32_t i = queue->front; 51 | uart_debug_print("[queue] queue traverse \n\r"); 52 | while( i != queue->rear){ 53 | uart_debug_print(" |--[queue item] at : '"); 54 | uart_debug_print_i32(queue->elems[i],16); 55 | uart_debug_print("'\n\r"); 56 | i = (i+1) % queue->size; 57 | } 58 | } 59 | 60 | uint32_t os_queue_length(os_queue_t* queue){ 61 | return (queue->rear - queue->front + queue->size) % queue->size; 62 | } 63 | 64 | uint32_t os_queue_is_empty(os_queue_t* queue){ 65 | if(queue->front == queue->rear){ 66 | return TRUE; 67 | } 68 | return FALSE; 69 | } 70 | 71 | uint32_t os_queue_is_full(os_queue_t* queue){ 72 | if((queue->rear + 1) % queue->size == queue->front){ 73 | return TRUE; 74 | } 75 | return FALSE; 76 | } -------------------------------------------------------------------------------- /kernel/network/mqtt/include/mqtt.h: -------------------------------------------------------------------------------- 1 | #ifndef __CENO_NET_MQTT_H__ 2 | #define __CENO_NET_MQTT_H__ 3 | 4 | 5 | #include "../include/packet.h" 6 | 7 | #define EV_MQTT_BASE 0x100 8 | #define EV_MQTT_CONNECT (EV_MQTT_BASE + MQTT_PACKET_TYPE_CONNECT) 9 | #define EV_MQTT_CONNACK (EV_MQTT_BASE + MQTT_PACKET_TYPE_CONNACK) 10 | #define EV_MQTT_PUBLISH (EV_MQTT_BASE + MQTT_PACKET_TYPE_PUBLISH) 11 | #define EV_MQTT_PUBACK (EV_MQTT_BASE + MQTT_PACKET_TYPE_PUBACK) 12 | #define EV_MQTT_PUBREC (EV_MQTT_BASE + MQTT_PACKET_TYPE_PUBREC) 13 | #define EV_MQTT_PUBREL (EV_MQTT_BASE + MQTT_PACKET_TYPE_PUBREL) 14 | #define EV_MQTT_PUBCOMP (EV_MQTT_BASE + MQTT_PACKET_TYPE_PUBCOMP) 15 | #define EV_MQTT_SUBSCRIBE (EV_MQTT_BASE + MQTT_PACKET_TYPE_SUBSCRIBE) 16 | #define EV_MQTT_SUBACK (EV_MQTT_BASE + MQTT_PACKET_TYPE_SUBACK) 17 | #define EV_MQTT_UNSUBSCRIBE (EV_MQTT_BASE + MQTT_PACKET_TYPE_UNSUBSCRIBE) 18 | #define EV_MQTT_UNSUBACK (EV_MQTT_BASE + MQTT_PACKET_TYPE_UNSUBACK) 19 | #define EV_MQTT_PINGREQ (EV_MQTT_BASE + MQTT_PACKET_TYPE_PINGREQ) 20 | #define EV_MQTT_PINGRESP (EV_MQTT_BASE + MQTT_PACKET_TYPE_PINGRESP) 21 | #define EV_MQTT_DISCONNECT (EV_MQTT_BASE + MQTT_PACKET_TYPE_DISCONNECT) 22 | 23 | 24 | 25 | #define MAX_PACKET_ID 0xFFFF 26 | 27 | typedef enum QoS 28 | { 29 | QOS0, 30 | QOS1, 31 | QOS2 32 | } QoS_e; 33 | 34 | typedef struct mqtt_proto_data mqtt_proto_data_t; 35 | 36 | typedef struct mqtt_msg 37 | { 38 | unsigned char type; 39 | QoS_e qos; 40 | unsigned int len; 41 | unsigned char retained; 42 | unsigned char dup; 43 | unsigned short id; 44 | void *payload; 45 | size_t payloadlen; 46 | mqtt_proto_data_t *mqtt_data; 47 | } mqtt_msg_t; 48 | 49 | typedef struct mqtt_suback_data 50 | { 51 | QoS_e grantedQoS; 52 | } mqtt_suback_data_t; 53 | 54 | 55 | typedef void (*mqtt_msg_handler)(void *); 56 | 57 | typedef struct mqtt_proto_data 58 | { 59 | unsigned short keep_alive; 60 | time_t last_time; 61 | unsigned int next_packetid; 62 | struct MessageHandlers 63 | { 64 | unsigned char efficient; 65 | const char* topicFilter; 66 | mqtt_msg_handler cb; 67 | } messageHandlers[MQTT_BUILTIN_NUM]; /* Message handlers are indexed by subscription topic */ 68 | } mqtt_proto_data_t; 69 | 70 | int mqtt_packetid(connection_t *nc); 71 | int mqtt_connect(connection_t *nc, mqtt_connect_opt_t *options); 72 | int mqtt_publish(connection_t *nc, mqtt_publish_opt_t *options); 73 | int mqtt_subscribe(connection_t *nc, mqtt_subscribe_opt_t *options, mqtt_msg_handler *cbs); 74 | int mqtt_puback(connection_t *nc, mqtt_puback_opt_t *options); 75 | int mqtt_ping(connection_t *nc); 76 | int mqtt_unsubscribe(connection_t *nc, mqtt_unsubscribe_opt_t *options); 77 | void mqtt_event_handler(connection_t *nc, int event, void *event_data); 78 | 79 | #endif // ! __CENO_NET_MQTT_H__ -------------------------------------------------------------------------------- /user/asm/main.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "main.c" 12 | .text 13 | .comm task_01,52,4 14 | .comm stack_task_01,160,4 15 | .section .rodata 16 | .align 2 17 | .LC0: 18 | .ascii "[task] task 1 \012\015\000" 19 | .text 20 | .align 2 21 | .global task_01_thread 22 | .syntax unified 23 | .arm 24 | .fpu softvfp 25 | .type task_01_thread, %function 26 | task_01_thread: 27 | @ Function supports interworking. 28 | @ args = 0, pretend = 0, frame = 0 29 | @ frame_needed = 1, uses_anonymous_args = 0 30 | push {fp, lr} 31 | add fp, sp, #4 32 | .L2: 33 | ldr r0, .L3 34 | bl uart_debug_print 35 | b .L2 36 | .L4: 37 | .align 2 38 | .L3: 39 | .word .LC0 40 | .size task_01_thread, .-task_01_thread 41 | .comm task_02,52,4 42 | .comm stack_task_02,160,4 43 | .section .rodata 44 | .align 2 45 | .LC1: 46 | .ascii "[task] task 2 \012\015\000" 47 | .text 48 | .align 2 49 | .global task_02_thread 50 | .syntax unified 51 | .arm 52 | .fpu softvfp 53 | .type task_02_thread, %function 54 | task_02_thread: 55 | @ Function supports interworking. 56 | @ args = 0, pretend = 0, frame = 0 57 | @ frame_needed = 1, uses_anonymous_args = 0 58 | push {fp, lr} 59 | add fp, sp, #4 60 | .L6: 61 | ldr r0, .L7 62 | bl uart_debug_print 63 | b .L6 64 | .L8: 65 | .align 2 66 | .L7: 67 | .word .LC1 68 | .size task_02_thread, .-task_02_thread 69 | .section .rodata 70 | .align 2 71 | .LC2: 72 | .ascii "[debug] _______________begin______________\012\015\000" 73 | .align 2 74 | .LC3: 75 | .ascii "[main] main start.\012\015\000" 76 | .align 2 77 | .LC4: 78 | .ascii "task_01\000" 79 | .align 2 80 | .LC5: 81 | .ascii "task_02\000" 82 | .text 83 | .align 2 84 | .global main 85 | .syntax unified 86 | .arm 87 | .fpu softvfp 88 | .type main, %function 89 | main: 90 | @ Function supports interworking. 91 | @ args = 0, pretend = 0, frame = 8 92 | @ frame_needed = 1, uses_anonymous_args = 0 93 | push {fp, lr} 94 | add fp, sp, #4 95 | sub sp, sp, #16 96 | bl bsp_init 97 | ldr r0, .L11 98 | bl uart_debug_print 99 | ldr r0, .L11+4 100 | bl uart_debug_print 101 | bl os_init 102 | ldr r3, .L11+8 103 | str r3, [sp, #4] 104 | mov r3, #160 105 | str r3, [sp] 106 | ldr r3, .L11+12 107 | mov r2, #5 108 | ldr r1, .L11+16 109 | ldr r0, .L11+20 110 | bl os_task_create 111 | mov r3, r0 112 | strb r3, [fp, #-5] 113 | ldr r3, .L11+24 114 | str r3, [sp, #4] 115 | mov r3, #160 116 | str r3, [sp] 117 | ldr r3, .L11+28 118 | mov r2, #4 119 | ldr r1, .L11+32 120 | ldr r0, .L11+36 121 | bl os_task_create 122 | mov r3, r0 123 | strb r3, [fp, #-6] 124 | bl os_run 125 | mov r3, #0 126 | mov r0, r3 127 | sub sp, fp, #4 128 | @ sp needed 129 | pop {fp, lr} 130 | bx lr 131 | .L12: 132 | .align 2 133 | .L11: 134 | .word .LC2 135 | .word .LC3 136 | .word task_01_thread 137 | .word stack_task_01 138 | .word .LC4 139 | .word task_01 140 | .word task_02_thread 141 | .word stack_task_02 142 | .word .LC5 143 | .word task_02 144 | .size main, .-main 145 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 146 | -------------------------------------------------------------------------------- /user/Makefile: -------------------------------------------------------------------------------- 1 | include ../conf/conf.mk 2 | 3 | MATCH="match" 4 | 5 | build: $(OBJS) bin/$(PROJECT_NAME).bin 6 | # ================================================================== 7 | # 用户C代码 8 | $(OBJ)%.o: src/%.c 9 | $(MKDIR) 10 | $(CC) -o $@ $^ $(CPPFLAGS) $(CFLAGS) 11 | 12 | # 板载C代码 13 | $(OBJ)%.o: $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/src/%.c 14 | $(MKDIR) 15 | $(CC) -o $@ $^ $(CPPFLAGS) $(CFLAGS) 16 | 17 | # 板子硬件抽象层C代码 18 | $(OBJ)%.o: $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/ceno_os/src/%.c 19 | $(MKDIR) 20 | $(CC) -o $@ $^ $(CPPFLAGS) $(CFLAGS) 21 | 22 | # 内核C代码 23 | $(OBJ)%.o: $(BASE_DIR)/kernel/ceno/src/%.c 24 | $(MKDIR) 25 | $(CC) -o $@ $^ $(CPPFLAGS) $(CFLAGS) 26 | 27 | # 用户汇编代码 28 | $(OBJ)%.o: src/%.s 29 | $(MKDIR) 30 | $(AS) -o $@ $^ $(CPPFLAGS) $(ASFLAGS) 31 | 32 | # 板载汇编 33 | $(OBJ)%.o: $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/src/%.s 34 | $(MKDIR) 35 | $(AS) -o $@ $^ $(CPPFLAGS) $(ASFLAGS) 36 | 37 | # ================================================================== 38 | optimize: $(OPTMIZES) 39 | # 优化c代码 40 | $(OPTMIZE)%.i: src/%.c 41 | $(MKDIR) 42 | $(CC) -E $^ -o $@ $(CPPFLAGS) $(CFLAGS) 43 | 44 | $(OPTMIZE)%.i: $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/src/%.c 45 | $(MKDIR) 46 | $(CC) -E $^ -o $@ $(CPPFLAGS) $(CFLAGS) 47 | 48 | $(OPTMIZE)%.i: $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/ceno_os/src/%.c 49 | $(MKDIR) 50 | $(CC) -E $^ -o $@ $(CPPFLAGS) $(CFLAGS) 51 | 52 | $(OPTMIZE)%.i: $(BASE_DIR)/kernel/ceno/src/%.c 53 | $(MKDIR) 54 | $(CC) -E $^ -o $@ $(CPPFLAGS) $(CFLAGS) 55 | 56 | # ================================================================== 57 | dump: bin/$(PROJECT_NAME).asm 58 | 59 | bin/$(PROJECT_NAME).asm: bin/$(PROJECT_NAME).bin 60 | $(OBJDUMP) -D -S -s -b binary -m arm $< > $@ 61 | 62 | asm: $(ASMCODES) 63 | # 汇编代码生成 64 | $(ASMCODE)%.s: $(OPTMIZE)/%.i 65 | $(MKDIR) 66 | $(CC) -S $^ -o $@ 67 | # ================================================================== 68 | 69 | bin/$(PROJECT_NAME).elf: $(OBJS) 70 | $(MKDIR) 71 | $(LD) -o $@ $^ $(LDFLAGS) 72 | 73 | bin/$(PROJECT_NAME).bin: bin/$(PROJECT_NAME).elf 74 | $(OBJCOPY) -O binary $< $@ 75 | 76 | # ================================================================== 77 | 78 | 79 | read: 80 | ${ELFREAD} -h ${BASE_DIR}/${BUILD_DIR}/os.elf 81 | 82 | debug: 83 | echo ${OBJS} 84 | 85 | # 查看当前系统OPENOCD支持开发板 86 | openOCD_boards: 87 | ls ${OPENOCD_SCRIPT_DIR} 88 | 89 | 90 | openOCD_kill: 91 | OPENOCD_PIDS=$$(ps -ef | grep "openocd" | grep -v "$$0" | grep -v "grep" | awk '{print $$2}'); \ 92 | echo $$OPENOCD_PIDS; \ 93 | if [ $$OPENOCD_PIDS ]; then \ 94 | kill -9 $$OPENOCD_PIDS; \ 95 | fi 96 | 97 | # 连接 98 | openOCD_connect: openOCD_kill 99 | nohup openocd -f ${OPENOCD_SCRIPT_DIR}/${OCD_CFG_FILE} & 100 | telnet localhost 4444 101 | 102 | openOCD_bug: 103 | openocd -f interface/dummy.cfg -f ${OPENOCD_SCRIPT_DIR}/${OCD_CFG_FILE} 104 | 105 | flash: 106 | (echo halt;echo flash erase_sector 0 0 ${FLASH_SECTOR};echo flash write_image erase ${BASE_DIR}/user/bin/${PROJECT_NAME}.bin 0;echo reset;) | telnet localhost 4444 | grep "#0" 107 | 108 | verify: 109 | (echo halt;echo flash verify_bank 0 ${BASE_DIR}/user/bin/${PROJECT_NAME}.bin 0;) | telnet localhost 4444 | grep ${MATCH} 110 | 111 | clean: 112 | rm -rf ${BASE_DIR}/user/bin 113 | rm -rf ${BASE_DIR}/user/obj 114 | rm -rf ${BASE_DIR}/user/asm 115 | rm -rf ${BASE_DIR}/user/optimize 116 | usb: 117 | # system_profiler SPUSBDataType 118 | lsusb 119 | 120 | gdb: 121 | $(GDB) 122 | 123 | all: clean optimize asm build dump 124 | # doc: 125 | # /usr/local/Cellar/node/7.4.0/lib/node_modules/docsify-cli/bin/docsify serve ../docs/docs 126 | -------------------------------------------------------------------------------- /conf/conf.mk: -------------------------------------------------------------------------------- 1 | # ==================================================================== 2 | # 项目目录 3 | BASE_DIR=/Users/neroyang/project/Ceno-RTOS 4 | BUILD_DIR=build 5 | DEBUG_DIR=debug 6 | # ==================================================================== 7 | # 项目名称 8 | PROJECT_NAME=CenoRTOS 9 | # 开发板支持 10 | ARCH=arm32 11 | BOARD=ek-TM4C123gxl 12 | MCU=TM4C123GH6PM 13 | LINK_FILE=link.ld 14 | OCD_CFG_FILE=ek-tm4c123gxl.cfg 15 | 16 | # BOARD=alios_things_starter_kit 17 | # MCU=stm32l 18 | # LINK_FILE=STM32L433RCTxP_FLASH.ld 19 | # OCD_CFG_FILE=stm32l4discovery.cfg 20 | # ==================================================================== 21 | # 用户C代码 22 | SRC=$(wildcard src/*.c) 23 | # 板载C代码 24 | SRC+=$(wildcard $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/src/*.c) 25 | # 内核C代码 26 | SRC+=$(wildcard $(BASE_DIR)/kernel/ceno/src/*.c) 27 | # 硬件抽象层C代码 28 | SRC+=$(wildcard $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/ceno_os/src/*.c) 29 | 30 | # 用户汇编代码 31 | ASM=$(wildcard src/*.s) 32 | # 板载汇编代码 33 | ASM+=$(wildcard $(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/src/*.s) 34 | # 内核汇编代码 35 | # 硬件抽象层汇编代码 36 | 37 | OBJ=obj/ 38 | OBJS=$(addprefix $(OBJ),$(notdir $(SRC:.c=.o))) 39 | OBJS+=$(addprefix $(OBJ),$(notdir $(ASM:.s=.o))) 40 | 41 | OPTMIZE=optimize/ 42 | OPTMIZES=$(addprefix $(OPTMIZE),$(notdir $(SRC:.c=.i))) 43 | OPTMIZES+=$(addprefix $(OPTMIZE),$(notdir $(ASM:.s=.i))) 44 | 45 | OPTMIZE_PATH=$(wildcard optimize/*.i) 46 | ASMCODE=asm/ 47 | ASMCODES=$(addprefix $(ASMCODE),$(notdir $(OPTMIZE_PATH:.i=.s))) 48 | # ASMCODES+=$(addprefix $(ASMCODE),$(notdir $(ASM:.s=.i))) 49 | 50 | # ==================================================================== 51 | # CMSMS 52 | CMSIS=$(BASE_DIR)/lib/SMSIS/Include 53 | # QPC 54 | QPC=$(BASE_DIR)/lib/QPC/Include 55 | # 内核 56 | CENO_KERNEL=$(BASE_DIR)/kernel/ceno/include 57 | # drivers 58 | DRIVERS=$(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/include 59 | # bsp 60 | BSP=$(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/ceno_os/include 61 | # user_config 62 | USER_CONFIG=$(BASE_DIR)/user/include 63 | # include 64 | CPPFLAGS=-I include 65 | CPPFLAGS += -I ${DRIVERS} 66 | CPPFLAGS += -I ${CMSIS} 67 | CPPFLAGS += -I ${QPC} 68 | CPPFLAGS += -I ${CENO_KERNEL} 69 | CPPFLAGS += -I ${BSP} 70 | CPPFLAGS += -I ${USER_CONFIG} 71 | # ==================================================================== 72 | CFLAGS=-ggdb -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp 73 | # CFLAGS += -Os -ffunction-sections -fdata-sections -MD -std=c99 74 | CFLAGS += -MD -std=c99 75 | CFLAGS += -pedantic -DPART_${MCU} -c 76 | CFLAGS += -DTARGET_IS_BLIZZARD_RA1 77 | CFLAGS += -w 78 | # ==================================================================== 79 | 80 | # ASFLAGS=-ggdb -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp 81 | # ASFLAGS += -ffunction-sections -fdata-sections -MD -std=c99 82 | # ASFLAGS += -pedantic -DPART_${MCU} -c 83 | # ASFLAGS += -DTARGET_IS_BLIZZARD_RA1 84 | 85 | # ==================================================================== 86 | # 链接脚本 87 | LD_SCRIPT=$(BASE_DIR)/board/arch/${ARCH}/${BOARD}/${MCU}/ld/${LINK_FILE} 88 | LDFLAGS=-T $(LD_SCRIPT) --entry Reset_Handler --gc-sections 89 | # ==================================================================== 90 | # 编译器 91 | CC=~/gcc-arm-none-eabi/bin/arm-none-eabi-gcc 92 | AS=~/gcc-arm-none-eabi/bin/arm-none-eabi-as 93 | CXX=~/gcc-arm-none-eabi/bin/arm-none-eabi-g++ 94 | LD=~/gcc-arm-none-eabi/bin/arm-none-eabi-ld 95 | OBJCOPY=~/gcc-arm-none-eabi/bin/arm-none-eabi-objcopy 96 | ELFREAD=~/gcc-arm-none-eabi/bin/arm-none-eabi-readelf 97 | OBJDUMP=~/gcc-arm-none-eabi/bin/arm-none-eabi-objdump 98 | 99 | GDB=~/gcc-arm-none-eabi/bin/arm-none-eabi-gdb 100 | # ==================================================================== 101 | MKDIR=@mkdir -p $(@D) 102 | # ==================================================================== 103 | # openOCD目录 104 | OPENOCD_SCRIPT_DIR=/usr/local/share/openocd/scripts/board 105 | # ==================================================================== 106 | # flash 107 | FLASH_SECTOR=255 108 | # ==================================================================== -------------------------------------------------------------------------------- /kernel/ceno/src/os_kernel.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Ceno RTOS task 3 | * 4 | * 2018-12-17 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | */ 13 | #include "../include/os_api.h" 14 | 15 | #define TASK_MAX_SIZE 32 16 | 17 | os_queue_t osTaskQueue; 18 | os_queue_t osReadyTaskQueue; 19 | 20 | volatile os_task_t osIdleTask; 21 | uint32_t stackTaskIdle[40]; 22 | 23 | os_err_t os_init(void){ 24 | uart_debug_print("[kernel] os init.\n\r"); 25 | os_heap_init(); 26 | 27 | /** 28 | * Set the pendSV interrput priority to the losest level 0xFF 29 | */ 30 | *(uint32_t volatile *)0xE000ED20 |= (0xFFU << 16); 31 | 32 | 33 | /** 34 | * os objects container init 35 | */ 36 | os_err_t isOsObjectContainerInit = os_obj_container_init(); 37 | if(isOsObjectContainerInit==OS_ERR){ 38 | return isOsObjectContainerInit; 39 | } 40 | 41 | /* task queue create*/ 42 | os_err_t isOsTaskQueueCreate = os_queue_create(&osTaskQueue,"task queue",TASK_MAX_SIZE); 43 | if(isOsTaskQueueCreate==OS_ERR){ 44 | return isOsTaskQueueCreate; 45 | } 46 | 47 | /* ready task queue create*/ 48 | os_err_t isOsReadyTaskQueueCreate = os_queue_create(&osReadyTaskQueue,"ready task queue",TASK_MAX_SIZE); 49 | if(isOsReadyTaskQueueCreate==OS_ERR){ 50 | return isOsReadyTaskQueueCreate; 51 | } 52 | 53 | /** 54 | * os idle task init 55 | */ 56 | os_err_t isOsIdleTaskInit = os_task_create( 57 | &osIdleTask, 58 | "taskIdle", 59 | 0, 60 | stackTaskIdle, 61 | sizeof(stackTaskIdle), 62 | &os_idle 63 | ); 64 | 65 | osTaskCurr = &osIdleTask; 66 | 67 | if(isOsIdleTaskInit==OS_ERR){ 68 | return isOsIdleTaskInit; 69 | } 70 | } 71 | 72 | void task_idle_thread(){ 73 | for(unsigned int i = 0;i<~0;i++){ 74 | uart_debug_print("[task] idle. "); 75 | uart_debug_print_i32(i,10); 76 | uart_debug_print("\n\r"); 77 | } 78 | } 79 | 80 | os_err_t os_run(void){ 81 | os_queue_traverse(&osTaskQueue); 82 | uart_debug_print("[kernel] os run.\n\r"); 83 | /* callback to configure and start interrupts */ 84 | os_on_startup(); 85 | 86 | disable_irq(); 87 | os_sched(); 88 | enable_irq(); 89 | } 90 | 91 | os_err_t os_idle(void){ 92 | while(1){ 93 | task_idle_thread(); 94 | } 95 | } 96 | 97 | os_err_t os_tick(void){ 98 | uint32_t i = osTaskQueue.front; 99 | uart_debug_print("[task] tasks traverse \n\r"); 100 | os_task_t *highTask = &osIdleTask; 101 | while( i != osTaskQueue.rear){ 102 | os_task_t *t = (os_task_t *)osTaskQueue.elems[i]; 103 | uart_debug_print(" |--[task] task : '"); 104 | uart_debug_print(t->obj.name); 105 | uart_debug_print("', timeout : '"); 106 | uart_debug_print_i32(t->timeout,10); 107 | uart_debug_print("ms'\n\r"); 108 | if(t->timeout > 0){ 109 | t->timeout--; 110 | if (t->timeout == 0U) { 111 | t->state = OS_STATE_READY; 112 | } 113 | } 114 | 115 | if(t->state == OS_STATE_READY && (t->priority > highTask->priority)){ 116 | highTask = t; 117 | } 118 | i = (i+1) % osTaskQueue.size; 119 | } 120 | os_queue_item_en(&osReadyTaskQueue,highTask); 121 | } 122 | 123 | os_task_t* os_get_next_ready_from_task_queue(os_queue_t* queue){ 124 | uart_debug_print("[kernel] os ready queue size : '"); 125 | uart_debug_print_i32(os_queue_length(queue),10); 126 | uart_debug_print("'\n\r"); 127 | uint32_t ptrToTask; 128 | os_queue_item_de(queue,&ptrToTask); 129 | os_task_t* t = (os_task_t *)ptrToTask; 130 | return t; 131 | } 132 | 133 | os_err_t os_sched(void){ 134 | uart_debug_print("[kernel] os sched.\n\r"); 135 | if(os_queue_length(&osReadyTaskQueue)<=0U){ 136 | osTaskNext = &osIdleTask; 137 | }else{ 138 | osTaskNext = os_get_next_ready_from_task_queue(&osReadyTaskQueue); 139 | } 140 | uart_debug_print("[scheduler] next task : '"); 141 | uart_debug_print(osTaskNext->obj.name); 142 | uart_debug_print("'\n\r"); 143 | 144 | 145 | *(uint32_t volatile *)0xE000ED04 = (1U << 27); 146 | uart_debug_print_i32(*(uint32_t volatile *)0xE000ED04>>28 & 1,10); 147 | uart_debug_print("\n\r"); 148 | *(uint32_t volatile *)0xE000ED04 = (1U << 28); 149 | uart_debug_print_i32(*(uint32_t volatile *)0xE000ED04>>28 & 1,10); 150 | uart_debug_print("\n\r"); 151 | uart_debug_print_i32(*(uint32_t volatile *)0xE000ED24>>10 & 1,10); 152 | uart_debug_print("\n\r"); 153 | 154 | /* trigger PendSV, if needed */ 155 | if (osTaskNext != osTaskCurr) { 156 | /* todo : this need be a hal function */ 157 | *(uint32_t volatile *)0xE000ED04 = (1U << 28); 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/include/interrupt.h: -------------------------------------------------------------------------------- 1 | #ifndef __CENO_RTOS_INTERRUPT_H__ 2 | #define __CENO_RTOS_INTERRUPT_H__ 3 | 4 | #include "os.h" 5 | 6 | 7 | extern os_err_t os_tick(void); 8 | extern os_err_t os_idle(void); 9 | extern os_err_t os_task_switch_next(void); 10 | 11 | void SysTick_Handler(void); 12 | void PendSV_Handler(void); 13 | void NMI_Handler(void); 14 | void MemManage_Handler(void); 15 | void BusFault_Handler(void); 16 | void UsageFault_Handler(void); 17 | void HardFault_Handler(void); 18 | void SVC_Handler(void); 19 | void DebugMon_Handler(void); 20 | void GPIOPortA_IRQHandler(void); 21 | void GPIOPortB_IRQHandler(void); 22 | void GPIOPortC_IRQHandler(void); 23 | void GPIOPortD_IRQHandler(void); 24 | void GPIOPortE_IRQHandler(void); 25 | void UART0_IRQHandler(void); 26 | void UART1_IRQHandler(void); 27 | void SSI0_IRQHandler(void); 28 | void I2C0_IRQHandler(void); 29 | void PWMFault_IRQHandler(void); 30 | void PWMGen0_IRQHandler(void); 31 | void PWMGen1_IRQHandler(void); 32 | void PWMGen2_IRQHandler(void); 33 | void QEI0_IRQHandler(void); 34 | void ADCSeq0_IRQHandler(void); 35 | void ADCSeq1_IRQHandler(void); 36 | void ADCSeq2_IRQHandler(void); 37 | void ADCSeq3_IRQHandler(void); 38 | void Watchdog_IRQHandler(void); 39 | void Timer0A_IRQHandler(void); 40 | void Timer0B_IRQHandler(void); 41 | void Timer1A_IRQHandler(void); 42 | void Timer1B_IRQHandler(void); 43 | void Timer2A_IRQHandler(void); 44 | void Timer2B_IRQHandler(void); 45 | void Comp0_IRQHandler(void); 46 | void Comp1_IRQHandler(void); 47 | void Comp2_IRQHandler(void); 48 | void SysCtrl_IRQHandler(void); 49 | void FlashCtrl_IRQHandler(void); 50 | void GPIOPortF_IRQHandler(void); 51 | void GPIOPortG_IRQHandler(void); 52 | void GPIOPortH_IRQHandler(void); 53 | void UART2_IRQHandler(void); 54 | void SSI1_IRQHandler(void); 55 | void Timer3A_IRQHandler(void); 56 | void Timer3B_IRQHandler(void); 57 | void I2C1_IRQHandler(void); 58 | void QEI1_IRQHandler(void); 59 | void CAN0_IRQHandler(void); 60 | void CAN1_IRQHandler(void); 61 | void CAN2_IRQHandler(void); 62 | void Hibernate_IRQHandler(void); 63 | void USB0_IRQHandler(void); 64 | void PWMGen3_IRQHandler(void); 65 | void uDMAST_IRQHandler(void); 66 | void uDMAError_IRQHandler(void); 67 | void ADC1Seq0_IRQHandler(void); 68 | void ADC1Seq1_IRQHandler(void); 69 | void ADC1Seq2_IRQHandler(void); 70 | void ADC1Seq3_IRQHandler(void); 71 | void I2S0_IRQHandler(void); 72 | void EBI0_IRQHandler(void); 73 | void GPIOPortJ_IRQHandler(void); 74 | void GPIOPortK_IRQHandler(void); 75 | void GPIOPortL_IRQHandler(void); 76 | void SSI2_IRQHandler(void); 77 | void SSI3_IRQHandler(void); 78 | void UART3_IRQHandler(void); 79 | void UART4_IRQHandler(void); 80 | void UART5_IRQHandler(void); 81 | void UART6_IRQHandler(void); 82 | void UART7_IRQHandler(void); 83 | void I2C2_IRQHandler(void); 84 | void I2C3_IRQHandler(void); 85 | void Timer4A_IRQHandler(void); 86 | void Timer4B_IRQHandler(void); 87 | void Timer5A_IRQHandler(void); 88 | void Timer5B_IRQHandler(void); 89 | void WideTimer0A_IRQHandler(void); 90 | void WideTimer0B_IRQHandler(void); 91 | void WideTimer1A_IRQHandler(void); 92 | void WideTimer1B_IRQHandler(void); 93 | void WideTimer2A_IRQHandler(void); 94 | void WideTimer2B_IRQHandler(void); 95 | void WideTimer3A_IRQHandler(void); 96 | void WideTimer3B_IRQHandler(void); 97 | void WideTimer4A_IRQHandler(void); 98 | void WideTimer4B_IRQHandler(void); 99 | void WideTimer5A_IRQHandler(void); 100 | void WideTimer5B_IRQHandler(void); 101 | void FPU_IRQHandler(void); 102 | void PECI0_IRQHandler(void); 103 | void LPC0_IRQHandler(void); 104 | void I2C4_IRQHandler(void); 105 | void I2C5_IRQHandler(void); 106 | void GPIOPortM_IRQHandler(void); 107 | void GPIOPortN_IRQHandler(void); 108 | void QEI2_IRQHandler(void); 109 | void Fan0_IRQHandler(void); 110 | void GPIOPortP0_IRQHandler(void); 111 | void GPIOPortP1_IRQHandler(void); 112 | void GPIOPortP2_IRQHandler(void); 113 | void GPIOPortP3_IRQHandler(void); 114 | void GPIOPortP4_IRQHandler(void); 115 | void GPIOPortP5_IRQHandler(void); 116 | void GPIOPortP6_IRQHandler(void); 117 | void GPIOPortP7_IRQHandler(void); 118 | void GPIOPortQ0_IRQHandler(void); 119 | void GPIOPortQ1_IRQHandler(void); 120 | void GPIOPortQ2_IRQHandler(void); 121 | void GPIOPortQ3_IRQHandler(void); 122 | void GPIOPortQ4_IRQHandler(void); 123 | void GPIOPortQ5_IRQHandler(void); 124 | void GPIOPortQ6_IRQHandler(void); 125 | void GPIOPortQ7_IRQHandler(void); 126 | void GPIOPortR_IRQHandler(void); 127 | void GPIOPortS_IRQHandler(void); 128 | void PWM1Gen0_IRQHandler(void); 129 | void PWM1Gen1_IRQHandler(void); 130 | void PWM1Gen2_IRQHandler(void); 131 | void PWM1Gen3_IRQHandler(void); 132 | void PWM1Fault_IRQHandler(void); 133 | void SystemException_ISR(void); 134 | 135 | 136 | #endif // !__CENO_RTOS_INTERRUPT_H__ -------------------------------------------------------------------------------- /user/asm/os_semphore.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "os_semphore.c" 12 | .text 13 | .align 2 14 | .global os_sem_create 15 | .syntax unified 16 | .arm 17 | .fpu softvfp 18 | .type os_sem_create, %function 19 | os_sem_create: 20 | @ Function supports interworking. 21 | @ args = 0, pretend = 0, frame = 32 22 | @ frame_needed = 1, uses_anonymous_args = 0 23 | push {fp, lr} 24 | add fp, sp, #4 25 | sub sp, sp, #32 26 | str r0, [fp, #-24] 27 | str r1, [fp, #-28] 28 | str r2, [fp, #-32] 29 | ldr r3, [fp, #-32] 30 | cmp r3, #0 31 | bne .L2 32 | mov r3, #1 33 | b .L5 34 | .L2: 35 | ldr r3, [fp, #-28] 36 | cmp r3, #0 37 | bne .L4 38 | mov r3, #1 39 | b .L5 40 | .L4: 41 | mov r3, #2 42 | strb r3, [fp, #-8] 43 | ldr r3, [fp, #-28] 44 | str r3, [fp, #-12] 45 | ldr r3, [fp, #-24] 46 | mov ip, r3 47 | sub r3, fp, #20 48 | ldm r3, {r0, r1, r2, r3} 49 | stm ip, {r0, r1, r2, r3} 50 | ldr r3, [fp, #-24] 51 | ldr r2, [fp, #-32] 52 | str r2, [r3, #16] 53 | ldr r3, [fp, #-24] 54 | add r3, r3, #24 55 | mov r2, #10 56 | ldr r1, [fp, #-28] 57 | mov r0, r3 58 | bl os_queue_create 59 | mov r3, r0 60 | .L5: 61 | mov r0, r3 62 | sub sp, fp, #4 63 | @ sp needed 64 | pop {fp, lr} 65 | bx lr 66 | .size os_sem_create, .-os_sem_create 67 | .align 2 68 | .global os_sem_del 69 | .syntax unified 70 | .arm 71 | .fpu softvfp 72 | .type os_sem_del, %function 73 | os_sem_del: 74 | @ Function supports interworking. 75 | @ args = 0, pretend = 0, frame = 16 76 | @ frame_needed = 1, uses_anonymous_args = 0 77 | push {fp, lr} 78 | add fp, sp, #4 79 | sub sp, sp, #16 80 | str r0, [fp, #-16] 81 | bl __DISABLE_IRQ 82 | ldr r3, [fp, #-16] 83 | ldr r3, [r3, #16] 84 | cmp r3, #0 85 | beq .L7 86 | ldr r3, [fp, #-16] 87 | ldr r3, [r3, #16] 88 | sub r2, r3, #1 89 | ldr r3, [fp, #-16] 90 | str r2, [r3, #16] 91 | b .L8 92 | .L7: 93 | ldr r3, [fp, #-8] 94 | mov r2, #3 95 | strb r2, [r3, #32] 96 | ldr r3, [fp, #-16] 97 | add r3, r3, #24 98 | ldr r1, [fp, #-8] 99 | mov r0, r3 100 | bl os_queue_add_item 101 | .L8: 102 | bl __ENABLE_IRQ 103 | nop 104 | mov r0, r3 105 | sub sp, fp, #4 106 | @ sp needed 107 | pop {fp, lr} 108 | bx lr 109 | .size os_sem_del, .-os_sem_del 110 | .align 2 111 | .global os_sem_give 112 | .syntax unified 113 | .arm 114 | .fpu softvfp 115 | .type os_sem_give, %function 116 | os_sem_give: 117 | @ Function supports interworking. 118 | @ args = 0, pretend = 0, frame = 8 119 | @ frame_needed = 1, uses_anonymous_args = 0 120 | push {fp, lr} 121 | add fp, sp, #4 122 | sub sp, sp, #8 123 | str r0, [fp, #-8] 124 | bl __DISABLE_IRQ 125 | bl __ENABLE_IRQ 126 | nop 127 | mov r0, r3 128 | sub sp, fp, #4 129 | @ sp needed 130 | pop {fp, lr} 131 | bx lr 132 | .size os_sem_give, .-os_sem_give 133 | .align 2 134 | .global os_sem_take 135 | .syntax unified 136 | .arm 137 | .fpu softvfp 138 | .type os_sem_take, %function 139 | os_sem_take: 140 | @ Function supports interworking. 141 | @ args = 0, pretend = 0, frame = 8 142 | @ frame_needed = 1, uses_anonymous_args = 0 143 | push {fp, lr} 144 | add fp, sp, #4 145 | sub sp, sp, #8 146 | str r0, [fp, #-8] 147 | str r1, [fp, #-12] 148 | bl __DISABLE_IRQ 149 | bl __ENABLE_IRQ 150 | nop 151 | mov r0, r3 152 | sub sp, fp, #4 153 | @ sp needed 154 | pop {fp, lr} 155 | bx lr 156 | .size os_sem_take, .-os_sem_take 157 | .align 2 158 | .global os_sem_count_get 159 | .syntax unified 160 | .arm 161 | .fpu softvfp 162 | .type os_sem_count_get, %function 163 | os_sem_count_get: 164 | @ Function supports interworking. 165 | @ args = 0, pretend = 0, frame = 8 166 | @ frame_needed = 1, uses_anonymous_args = 0 167 | @ link register save eliminated. 168 | str fp, [sp, #-4]! 169 | add fp, sp, #0 170 | sub sp, sp, #12 171 | str r0, [fp, #-8] 172 | str r1, [fp, #-12] 173 | ldr r3, [fp, #-8] 174 | add r3, r3, #16 175 | str r3, [fp, #-12] 176 | nop 177 | mov r0, r3 178 | add sp, fp, #0 179 | @ sp needed 180 | ldr fp, [sp], #4 181 | bx lr 182 | .size os_sem_count_get, .-os_sem_count_get 183 | .align 2 184 | .global os_sem_count_set 185 | .syntax unified 186 | .arm 187 | .fpu softvfp 188 | .type os_sem_count_set, %function 189 | os_sem_count_set: 190 | @ Function supports interworking. 191 | @ args = 0, pretend = 0, frame = 8 192 | @ frame_needed = 1, uses_anonymous_args = 0 193 | push {fp, lr} 194 | add fp, sp, #4 195 | sub sp, sp, #8 196 | str r0, [fp, #-8] 197 | str r1, [fp, #-12] 198 | bl __DISABLE_IRQ 199 | ldr r3, [fp, #-8] 200 | ldr r2, [fp, #-12] 201 | str r2, [r3, #16] 202 | bl __ENABLE_IRQ 203 | nop 204 | mov r0, r3 205 | sub sp, fp, #4 206 | @ sp needed 207 | pop {fp, lr} 208 | bx lr 209 | .size os_sem_count_set, .-os_sem_count_set 210 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 211 | -------------------------------------------------------------------------------- /user/asm/os_list.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "os_list.c" 12 | .text 13 | .align 2 14 | .global os_list_init 15 | .syntax unified 16 | .arm 17 | .fpu softvfp 18 | .type os_list_init, %function 19 | os_list_init: 20 | @ Function supports interworking. 21 | @ args = 0, pretend = 0, frame = 8 22 | @ frame_needed = 1, uses_anonymous_args = 0 23 | @ link register save eliminated. 24 | str fp, [sp, #-4]! 25 | add fp, sp, #0 26 | sub sp, sp, #12 27 | str r0, [fp, #-8] 28 | ldr r3, [fp, #-8] 29 | ldr r2, [fp, #-8] 30 | str r2, [r3] 31 | ldr r3, [fp, #-8] 32 | ldr r2, [fp, #-8] 33 | str r2, [r3, #4] 34 | nop 35 | mov r0, r3 36 | add sp, fp, #0 37 | @ sp needed 38 | ldr fp, [sp], #4 39 | bx lr 40 | .size os_list_init, .-os_list_init 41 | .align 2 42 | .global is_list_empty 43 | .syntax unified 44 | .arm 45 | .fpu softvfp 46 | .type is_list_empty, %function 47 | is_list_empty: 48 | @ Function supports interworking. 49 | @ args = 0, pretend = 0, frame = 8 50 | @ frame_needed = 1, uses_anonymous_args = 0 51 | @ link register save eliminated. 52 | str fp, [sp, #-4]! 53 | add fp, sp, #0 54 | sub sp, sp, #12 55 | str r0, [fp, #-8] 56 | ldr r3, [fp, #-8] 57 | ldr r3, [r3] 58 | ldr r2, [fp, #-8] 59 | cmp r2, r3 60 | moveq r3, #1 61 | movne r3, #0 62 | and r3, r3, #255 63 | mov r0, r3 64 | add sp, fp, #0 65 | @ sp needed 66 | ldr fp, [sp], #4 67 | bx lr 68 | .size is_list_empty, .-is_list_empty 69 | .align 2 70 | .global os_list_insert 71 | .syntax unified 72 | .arm 73 | .fpu softvfp 74 | .type os_list_insert, %function 75 | os_list_insert: 76 | @ Function supports interworking. 77 | @ args = 0, pretend = 0, frame = 8 78 | @ frame_needed = 1, uses_anonymous_args = 0 79 | @ link register save eliminated. 80 | str fp, [sp, #-4]! 81 | add fp, sp, #0 82 | sub sp, sp, #12 83 | str r0, [fp, #-8] 84 | str r1, [fp, #-12] 85 | ldr r3, [fp, #-8] 86 | ldr r2, [r3, #4] 87 | ldr r3, [fp, #-12] 88 | str r2, [r3, #4] 89 | ldr r3, [fp, #-12] 90 | ldr r2, [fp, #-8] 91 | str r2, [r3] 92 | ldr r3, [fp, #-8] 93 | ldr r3, [r3, #4] 94 | ldr r2, [fp, #-12] 95 | str r2, [r3] 96 | ldr r3, [fp, #-8] 97 | ldr r2, [fp, #-12] 98 | str r2, [r3, #4] 99 | nop 100 | mov r0, r3 101 | add sp, fp, #0 102 | @ sp needed 103 | ldr fp, [sp], #4 104 | bx lr 105 | .size os_list_insert, .-os_list_insert 106 | .align 2 107 | .global os_list_add 108 | .syntax unified 109 | .arm 110 | .fpu softvfp 111 | .type os_list_add, %function 112 | os_list_add: 113 | @ Function supports interworking. 114 | @ args = 0, pretend = 0, frame = 8 115 | @ frame_needed = 1, uses_anonymous_args = 0 116 | @ link register save eliminated. 117 | str fp, [sp, #-4]! 118 | add fp, sp, #0 119 | sub sp, sp, #12 120 | str r0, [fp, #-8] 121 | str r1, [fp, #-12] 122 | ldr r3, [fp, #-12] 123 | ldr r2, [fp, #-8] 124 | str r2, [r3, #4] 125 | ldr r3, [fp, #-8] 126 | ldr r2, [r3] 127 | ldr r3, [fp, #-12] 128 | str r2, [r3] 129 | ldr r3, [fp, #-8] 130 | ldr r3, [r3] 131 | ldr r2, [fp, #-12] 132 | str r2, [r3, #4] 133 | ldr r3, [fp, #-8] 134 | ldr r2, [fp, #-12] 135 | str r2, [r3] 136 | nop 137 | mov r0, r3 138 | add sp, fp, #0 139 | @ sp needed 140 | ldr fp, [sp], #4 141 | bx lr 142 | .size os_list_add, .-os_list_add 143 | .align 2 144 | .global os_list_rm 145 | .syntax unified 146 | .arm 147 | .fpu softvfp 148 | .type os_list_rm, %function 149 | os_list_rm: 150 | @ Function supports interworking. 151 | @ args = 0, pretend = 0, frame = 8 152 | @ frame_needed = 1, uses_anonymous_args = 0 153 | @ link register save eliminated. 154 | str fp, [sp, #-4]! 155 | add fp, sp, #0 156 | sub sp, sp, #12 157 | str r0, [fp, #-8] 158 | ldr r3, [fp, #-8] 159 | ldr r3, [r3, #4] 160 | ldr r2, [fp, #-8] 161 | ldr r2, [r2] 162 | str r2, [r3] 163 | ldr r3, [fp, #-8] 164 | ldr r3, [r3] 165 | ldr r2, [fp, #-8] 166 | ldr r2, [r2, #4] 167 | str r2, [r3, #4] 168 | nop 169 | mov r0, r3 170 | add sp, fp, #0 171 | @ sp needed 172 | ldr fp, [sp], #4 173 | bx lr 174 | .size os_list_rm, .-os_list_rm 175 | .align 2 176 | .global os_list_rm_init 177 | .syntax unified 178 | .arm 179 | .fpu softvfp 180 | .type os_list_rm_init, %function 181 | os_list_rm_init: 182 | @ Function supports interworking. 183 | @ args = 0, pretend = 0, frame = 8 184 | @ frame_needed = 1, uses_anonymous_args = 0 185 | @ link register save eliminated. 186 | str fp, [sp, #-4]! 187 | add fp, sp, #0 188 | sub sp, sp, #12 189 | str r0, [fp, #-8] 190 | ldr r3, [fp, #-8] 191 | ldr r3, [r3, #4] 192 | ldr r2, [fp, #-8] 193 | ldr r2, [r2] 194 | str r2, [r3] 195 | ldr r3, [fp, #-8] 196 | ldr r3, [r3] 197 | ldr r2, [fp, #-8] 198 | ldr r2, [r2, #4] 199 | str r2, [r3, #4] 200 | ldr r3, [fp, #-8] 201 | ldr r2, [fp, #-8] 202 | str r2, [r3, #4] 203 | ldr r3, [fp, #-8] 204 | ldr r2, [r3, #4] 205 | ldr r3, [fp, #-8] 206 | str r2, [r3] 207 | nop 208 | mov r0, r3 209 | add sp, fp, #0 210 | @ sp needed 211 | ldr fp, [sp], #4 212 | bx lr 213 | .size os_list_rm_init, .-os_list_rm_init 214 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 215 | -------------------------------------------------------------------------------- /kernel/ceno/src/os_heap.c: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2019-01-29 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | #include "../include/os_api.h" 14 | 15 | 16 | #define KERNEL_HEAP_SIZE 2048 // 2048 byte heap 17 | #define USER_HEAP_MAX_SIZE 2048 // user heap limit 18 | 19 | #define ALIGNMENT 8 20 | #define ALIGN(size) (((size) + (ALIGNMENT-1)) & ~0x7) 21 | #define OS_SIZE_T_SIZE (ALIGN(sizeof(os_size_t))) 22 | #define BLOCK_META_SIZE ALIGN(sizeof(os_heap_block_t)) 23 | 24 | static char *HEAP_START_ADDR; 25 | 26 | void *memcpy(void *dest, const void *src, os_size_t count); 27 | 28 | char *sbrk(os_size_t incr){ 29 | char *prevHeapEnd; 30 | if (HEAP_START_ADDR == NULL){ 31 | HEAP_START_ADDR = &_ebss; 32 | } 33 | prevHeapEnd = HEAP_START_ADDR; 34 | 35 | if (HEAP_START_ADDR + incr > &_stack_ptr) 36 | { 37 | /* out of memory errors */ 38 | uart_debug_print("[heap] sbrk: Heap and stack collision\n\r"); 39 | } 40 | HEAP_START_ADDR += incr; 41 | uart_debug_print("[heap] sbrk: expand '"); 42 | uart_debug_print_i32(incr,10); 43 | uart_debug_print("' at '"); 44 | uart_debug_print_i32(HEAP_START_ADDR,16); 45 | uart_debug_print("'\n\r"); 46 | return prevHeapEnd; 47 | } 48 | 49 | os_err_t os_heap_init(){ 50 | HEAP_START_ADDR = &_ebss; 51 | uart_debug_print("[heap] kernel heap: initial at '0x"); 52 | uart_debug_print_i32((unsigned int)HEAP_START_ADDR,16); 53 | uart_debug_print("'\n\r"); 54 | 55 | uart_debug_print("[heap] user heap: initial at '0x"); 56 | uart_debug_print_i32((unsigned int)HEAP_START_ADDR + KERNEL_HEAP_SIZE,16); 57 | uart_debug_print("'\n\r"); 58 | 59 | os_heap_block_t *block = sbrk(BLOCK_META_SIZE); 60 | block->size = BLOCK_META_SIZE; 61 | block->next = block; 62 | block->prior = block; 63 | 64 | uint32_t *a = os_heap_malloc(3*sizeof(uint32_t)); 65 | a[0] = 1; 66 | a[1] = 2; 67 | a[2] = 3; 68 | os_heap_free(a); 69 | uint32_t *b = os_heap_malloc(2*sizeof(uint32_t)); 70 | b[0] = 4; 71 | b[1] = 5; 72 | b[2] = 5; 73 | b[3] = 5; 74 | b[4] = 5; 75 | b[5] = 5; 76 | b[6] = 5; 77 | b[7] = 5; 78 | b[8] = 5; 79 | 80 | uint32_t *c = os_heap_malloc(10*sizeof(uint32_t)); 81 | os_heap_free(c); 82 | uint32_t *d = os_heap_malloc(10*sizeof(uint32_t)); 83 | os_heap_free(d); 84 | uint32_t *e = os_heap_malloc(10*sizeof(uint32_t)); 85 | os_heap_block_t* blocks[11]; 86 | for(int i = 0; i<10;i++){ 87 | blocks[i] = os_heap_malloc(i*sizeof(uint32_t)); 88 | } 89 | for(int i = 0; i<10;i++){ 90 | os_heap_free(blocks[i]); 91 | } 92 | print_heap(); 93 | 94 | return OS_ERR_NONE; 95 | } 96 | 97 | 98 | 99 | os_heap_block_t* os_heap_find_block(os_size_t size){ 100 | os_heap_block_t *block; 101 | for(block = ((os_heap_block_t *)&_ebss)->next; 102 | block != &_ebss && (block->size < size); 103 | block = block->next); 104 | 105 | if(block != &_ebss){ 106 | return block; 107 | }else{ 108 | return NULL; 109 | } 110 | } 111 | 112 | void* os_heap_malloc(os_size_t size){ 113 | os_size_t newSize = ALIGN(BLOCK_META_SIZE + size); 114 | os_heap_block_t *block = os_heap_find_block(newSize); 115 | 116 | if(block == NULL){ 117 | block = sbrk(newSize); 118 | if((long)block == -1){ 119 | return NULL; 120 | }else{ 121 | block->size = newSize | 1; 122 | } 123 | }else{ 124 | block->size |= 1; 125 | block->prior->next = block->next; 126 | block->next->prior = block->prior; 127 | } 128 | return (char *)block + BLOCK_META_SIZE; /* pointer to payload */ 129 | } 130 | 131 | void* os_heap_realloc (void* ptr, os_size_t newSize){ 132 | os_heap_block_t *block = ptr - BLOCK_META_SIZE; 133 | void *newPtr = os_heap_malloc(newSize); 134 | if(newPtr == NULL){ 135 | return NULL; 136 | } 137 | uint32_t copySize = block->size + BLOCK_META_SIZE; 138 | if(newSize < copySize){ 139 | copySize = newSize; 140 | } 141 | memcpy(newPtr, ptr, copySize); 142 | os_heap_free(ptr); 143 | return newPtr; 144 | } 145 | 146 | uint32_t os_heap_free(void* ptr){ 147 | os_heap_block_t *block = ptr - BLOCK_META_SIZE, 148 | *head = &_ebss; 149 | block->size &= ~1; 150 | block->next = head->next; 151 | block->prior = head; 152 | head->next = block; 153 | block->next->prior = block; 154 | } 155 | 156 | void* os_heap_calloc (os_size_t num, os_size_t size){ 157 | return os_heap_malloc(num*size); 158 | } 159 | 160 | void *memcpy(void *dest, const void *src, os_size_t count){ 161 | if (dest == NULL || src == NULL) 162 | { 163 | return NULL; 164 | } 165 | char* pdest =(char*) dest; 166 | char* psrc = (char*)src; 167 | while (count--) 168 | { 169 | *pdest++ = *psrc++; 170 | } 171 | return dest; 172 | } 173 | 174 | 175 | void print_heap(){ 176 | os_heap_block_t *block = &_ebss; 177 | while(block < (os_heap_block_t *)(&_ebss + KERNEL_HEAP_SIZE)){ 178 | if(block->size & 1){ 179 | uart_debug_print("[heap] alloced block: at '"); 180 | }else{ 181 | uart_debug_print("[heap] free block: at '"); 182 | } 183 | uart_debug_print_i32(block,16); 184 | uart_debug_print("',size "); 185 | uart_debug_print_i32((os_heap_block_t *)(block->size & ~1),10); 186 | uart_debug_print("\n\r"); 187 | 188 | block = (os_heap_block_t *)((char *)block + (block->size & ~1)); 189 | } 190 | } -------------------------------------------------------------------------------- /user/asm/startup.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "startup.c" 12 | .text 13 | .global vectors 14 | .section .vector_table,"a",%progbits 15 | .align 2 16 | .type vectors, %object 17 | .size vectors, 616 18 | vectors: 19 | .word _stack_ptr 20 | .word Reset_Handler 21 | .word NMI_Handler 22 | .word HardFault_Handler 23 | .word MemManage_Handler 24 | .word BusFault_Handler 25 | .word UsageFault_Handler 26 | .word 0 27 | .word 0 28 | .word 0 29 | .word 0 30 | .word SVC_Handler 31 | .word DebugMon_Handler 32 | .word 0 33 | .word PendSV_Handler 34 | .word SysTick_Handler 35 | .word GPIOPortA_IRQHandler 36 | .word GPIOPortB_IRQHandler 37 | .word GPIOPortC_IRQHandler 38 | .word GPIOPortD_IRQHandler 39 | .word GPIOPortE_IRQHandler 40 | .word UART0_IRQHandler 41 | .word UART1_IRQHandler 42 | .word SSI0_IRQHandler 43 | .word I2C0_IRQHandler 44 | .word PWMFault_IRQHandler 45 | .word PWMGen0_IRQHandler 46 | .word PWMGen1_IRQHandler 47 | .word PWMGen2_IRQHandler 48 | .word QEI0_IRQHandler 49 | .word ADCSeq0_IRQHandler 50 | .word ADCSeq1_IRQHandler 51 | .word ADCSeq2_IRQHandler 52 | .word ADCSeq3_IRQHandler 53 | .word Watchdog_IRQHandler 54 | .word Timer0A_IRQHandler 55 | .word Timer0B_IRQHandler 56 | .word Timer1A_IRQHandler 57 | .word Timer1B_IRQHandler 58 | .word Timer2A_IRQHandler 59 | .word Timer2B_IRQHandler 60 | .word Comp0_IRQHandler 61 | .word Comp1_IRQHandler 62 | .word Comp2_IRQHandler 63 | .word SysCtrl_IRQHandler 64 | .word FlashCtrl_IRQHandler 65 | .word GPIOPortF_IRQHandler 66 | .word GPIOPortG_IRQHandler 67 | .word GPIOPortH_IRQHandler 68 | .word UART2_IRQHandler 69 | .word SSI1_IRQHandler 70 | .word Timer3A_IRQHandler 71 | .word Timer3B_IRQHandler 72 | .word I2C1_IRQHandler 73 | .word QEI1_IRQHandler 74 | .word CAN0_IRQHandler 75 | .word CAN1_IRQHandler 76 | .word CAN2_IRQHandler 77 | .word 0 78 | .word Hibernate_IRQHandler 79 | .word USB0_IRQHandler 80 | .word PWMGen3_IRQHandler 81 | .word uDMAST_IRQHandler 82 | .word uDMAError_IRQHandler 83 | .word ADC1Seq0_IRQHandler 84 | .word ADC1Seq1_IRQHandler 85 | .word ADC1Seq2_IRQHandler 86 | .word ADC1Seq3_IRQHandler 87 | .word I2S0_IRQHandler 88 | .word EBI0_IRQHandler 89 | .word GPIOPortJ_IRQHandler 90 | .word GPIOPortK_IRQHandler 91 | .word GPIOPortL_IRQHandler 92 | .word SSI2_IRQHandler 93 | .word SSI3_IRQHandler 94 | .word UART3_IRQHandler 95 | .word UART4_IRQHandler 96 | .word UART5_IRQHandler 97 | .word UART6_IRQHandler 98 | .word UART7_IRQHandler 99 | .word 0 100 | .word 0 101 | .word 0 102 | .word 0 103 | .word I2C2_IRQHandler 104 | .word I2C3_IRQHandler 105 | .word Timer4A_IRQHandler 106 | .word Timer4B_IRQHandler 107 | .word 0 108 | .word 0 109 | .word 0 110 | .word 0 111 | .word 0 112 | .word 0 113 | .word 0 114 | .word 0 115 | .word 0 116 | .word 0 117 | .word 0 118 | .word 0 119 | .word 0 120 | .word 0 121 | .word 0 122 | .word 0 123 | .word 0 124 | .word 0 125 | .word 0 126 | .word Timer5A_IRQHandler 127 | .word Timer5B_IRQHandler 128 | .word WideTimer0A_IRQHandler 129 | .word WideTimer0B_IRQHandler 130 | .word WideTimer1A_IRQHandler 131 | .word WideTimer1B_IRQHandler 132 | .word WideTimer2A_IRQHandler 133 | .word WideTimer2B_IRQHandler 134 | .word WideTimer3A_IRQHandler 135 | .word WideTimer3B_IRQHandler 136 | .word WideTimer4A_IRQHandler 137 | .word WideTimer4B_IRQHandler 138 | .word WideTimer5A_IRQHandler 139 | .word WideTimer5B_IRQHandler 140 | .word SystemException_ISR 141 | .word 0 142 | .word 0 143 | .word 0 144 | .word 0 145 | .word 0 146 | .word 0 147 | .word 0 148 | .word 0 149 | .word 0 150 | .word 0 151 | .word 0 152 | .word 0 153 | .word 0 154 | .word 0 155 | .word 0 156 | .word 0 157 | .word 0 158 | .word 0 159 | .word 0 160 | .word 0 161 | .word 0 162 | .word 0 163 | .word 0 164 | .word 0 165 | .word 0 166 | .word 0 167 | .word 0 168 | .word PWM1Gen0_IRQHandler 169 | .word PWM1Gen1_IRQHandler 170 | .word PWM1Gen2_IRQHandler 171 | .word PWM1Gen3_IRQHandler 172 | .word PWM1Fault_IRQHandler 173 | .text 174 | .align 2 175 | .global Reset_Handler 176 | .syntax unified 177 | .arm 178 | .fpu softvfp 179 | .type Reset_Handler, %function 180 | Reset_Handler: 181 | @ Function supports interworking. 182 | @ args = 0, pretend = 0, frame = 8 183 | @ frame_needed = 1, uses_anonymous_args = 0 184 | push {fp, lr} 185 | add fp, sp, #4 186 | sub sp, sp, #8 187 | ldr r3, .L6 188 | str r3, [fp, #-8] 189 | ldr r3, .L6+4 190 | str r3, [fp, #-12] 191 | b .L2 192 | .L3: 193 | ldr r2, [fp, #-8] 194 | add r3, r2, #4 195 | str r3, [fp, #-8] 196 | ldr r3, [fp, #-12] 197 | add r1, r3, #4 198 | str r1, [fp, #-12] 199 | ldr r2, [r2] 200 | str r2, [r3] 201 | .L2: 202 | ldr r3, [fp, #-12] 203 | ldr r2, .L6+8 204 | cmp r3, r2 205 | bcc .L3 206 | ldr r3, .L6+12 207 | str r3, [fp, #-12] 208 | b .L4 209 | .L5: 210 | ldr r3, [fp, #-12] 211 | add r2, r3, #4 212 | str r2, [fp, #-12] 213 | mov r2, #0 214 | str r2, [r3] 215 | .L4: 216 | ldr r3, [fp, #-12] 217 | ldr r2, .L6+16 218 | cmp r3, r2 219 | bcc .L5 220 | bl os_on_startup 221 | bl main 222 | nop 223 | sub sp, fp, #4 224 | @ sp needed 225 | pop {fp, lr} 226 | bx lr 227 | .L7: 228 | .align 2 229 | .L6: 230 | .word _etext 231 | .word _data 232 | .word _edata 233 | .word _bss 234 | .word _ebss 235 | .size Reset_Handler, .-Reset_Handler 236 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 237 | -------------------------------------------------------------------------------- /kernel/ceno/src/os_task.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Ceno RTOS task 3 | * 4 | * 2018-12-17 5 | * neroyang 6 | * 7 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 8 | * 9 | * Contract Information: 10 | * nerosoft@outlook.com 11 | * https://www.cenocloud.com 12 | * 13 | * * 14 | * ____________________ 15 | * Stack | | 16 | * | | 17 | * higher | R4 | <-- SP saved in TCB (64B context) 18 | * addresses | R5 | ^ 19 | * | ^ | R6 | | 20 | * | | | R7 | | 8 registers pushed by handler: 21 | * | | | R8 | | R4..R11 22 | * | | | R9 | | Full task context is now stored 23 | * V | | R10 | | 24 | * | | R11 | | 25 | * direction | R0 | <-- SP when SVC handler gets control 26 | * of growth | R1 | ^ 27 | * | R2 | | 28 | * | R3 | | 8 registers are pushed by 29 | * | R12 | | the NVIC hardware: 30 | * | LR (R14) | | xPSR, PC, LR, R12, R3..R0 31 | * | PC (R15) | | 32 | * | xPSR | | 33 | * | | <-- SP before SVC 34 | * | (stuff) | 35 | * Stack + | | 36 | * StackSize |____________________| 37 | * 38 | */ 39 | #include "../include/os_api.h" 40 | 41 | os_task_t * volatile osTaskCurr; 42 | os_task_t * volatile osTaskNext; 43 | 44 | 45 | 46 | os_err_t os_task_create(os_task_t *me, 47 | cpu_char_t *name, 48 | priority_t priority, 49 | cpu_stk_t stkSto, 50 | cpu_stk_size_t stackSize, 51 | os_task_handler_t taskHandler){ 52 | uart_debug_print("[task] create task : '"); 53 | uart_debug_print(name); 54 | uart_debug_print("'\n\r"); 55 | /** 56 | * round down the stack top to the 8-byte boundary 57 | * NOTE: ARM Cortex-M stack grows down from high -> low memory 58 | */ 59 | uint32_t *sp = (uint32_t *)((((uint32_t)stkSto + stackSize) / 8) * 8); 60 | uint32_t *stk_limit; 61 | 62 | *(--sp) = (1U << 24); /* xPSR */ /* 0x01000000 */ 63 | *(--sp) = (uint32_t)taskHandler; /* PC */ 64 | *(--sp) = 0x0000000EU; /* LR */ 65 | *(--sp) = 0x0000000CU; /* R12 */ 66 | *(--sp) = 0x00000003U; /* R3 */ 67 | *(--sp) = 0x00000002U; /* R2 */ 68 | *(--sp) = 0x00000001U; /* R1 */ 69 | *(--sp) = 0x00000000U; /* R0 */ 70 | /* additionally, fake registers R4-R11 */ 71 | *(--sp) = 0x0000000BU; /* R11 */ 72 | *(--sp) = 0x0000000AU; /* R10 */ 73 | *(--sp) = 0x00000009U; /* R9 */ 74 | *(--sp) = 0x00000008U; /* R8 */ 75 | *(--sp) = 0x00000007U; /* R7 */ 76 | *(--sp) = 0x00000006U; /* R6 */ 77 | *(--sp) = 0x00000005U; /* R5 */ 78 | *(--sp) = 0x00000004U; /* R4 */ 79 | 80 | /* save the top of the stack in the thread's attibute */ 81 | me->sp = sp; 82 | 83 | /* round up the bottom of the stack to the 8-byte boundary */ 84 | stk_limit = (uint32_t *)(((((uint32_t)stkSto - 1U) / 8) + 1U) * 8); 85 | 86 | /* pre-fill the unused part of the stack with 0xDEADBEEF */ 87 | for (sp = sp - 1U; sp >= stk_limit; --sp) { 88 | *sp = 0xDEADBEEFU; 89 | } 90 | 91 | /* 将线程放到线程数组里*/ 92 | me->id = 1; 93 | me->obj.name = name; 94 | me->timeout = 0; 95 | me->priority = priority; 96 | if(priority > 0U ){ 97 | me->state=OS_STATE_READY; 98 | } 99 | 100 | os_err_t err = os_queue_item_en(&osTaskQueue,me); 101 | if(err==OS_ERR){ 102 | uart_debug_print("[task] task add to queue failed!\n\r"); 103 | } 104 | uart_debug_print("[task] task '"); 105 | uart_debug_print(me->obj.name); 106 | uart_debug_print("' add to queue '"); 107 | uart_debug_print(osTaskQueue.obj.name); 108 | uart_debug_print("'.\n\r"); 109 | } 110 | 111 | os_err_t os_task_switch_next(void){ 112 | 113 | uart_debug_print("[task] task switch next : '"); 114 | uart_debug_print(osTaskNext->obj.name); 115 | uart_debug_print("'.\n\r"); 116 | if(!osTaskCurr){ 117 | uart_debug_print("[task] task current is null.\n\r"); 118 | } 119 | if(!osTaskNext){ 120 | uart_debug_print("[task] task next is null.\n\r"); 121 | } 122 | 123 | /* context switch */ 124 | __asm( 125 | /* __disable_irq(); */ 126 | "CPSID I\n\t" 127 | 128 | /* if (osTaskCurr != (os_task_t *)0) { */ 129 | "LDR r3,.L11+12\n\t" 130 | "LDR r3,[r3,#0x00]\n\t" 131 | "CBZ r3,.PendSV_restore\n\t" 132 | 133 | "PUSH {r4,r11}\n\t" 134 | 135 | /* osTaskCurr->sp = sp; */ 136 | "LDR r3,.L11+12\n\t" 137 | "LDR r3,[r3]\n\t" 138 | "STR sp,[r3]\n\t" 139 | /* } */ 140 | 141 | ".PendSV_restore:\n\t" 142 | /* sp = osTaskNext->sp; */ 143 | "LDR r3,.L11+4\n\t" 144 | "LDR r3, [r3]\n\t" 145 | "LDR sp, [r3]\n\t" 146 | 147 | /* osTaskCurr = osTaskNext; */ 148 | "LDR r3,.L11+4\n\t" 149 | "LDR r3,[r3]\n\t" 150 | "LDR r2,.L11+12\n\t" 151 | "STR r3,[r2]\n\t" 152 | 153 | "POP {r4,r11}\n\t" 154 | 155 | /* __enable_irq(); */ 156 | "CPSIE I\n\t" 157 | 158 | "MOV r0,lr\n\t" 159 | 160 | "BX lr" 161 | ); 162 | uart_debug_print("[task] contex switch finished. never be here!!!\n\r"); 163 | } 164 | 165 | os_err_t os_task_exit(void){ 166 | 167 | } 168 | 169 | os_err_t os_task_switch_context(os_task_t *next){ 170 | osTaskCurr = next; 171 | } 172 | 173 | void delay(clock_t tick){ 174 | osTaskCurr->state = OS_STATE_BLOCKED; 175 | osTaskCurr->timeout = tick; 176 | } 177 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/include/startup.h: -------------------------------------------------------------------------------- 1 | #ifndef __START_UP_H__ 2 | #define __START_UP_H__ 3 | 4 | //main() of your program 5 | extern int main(void); 6 | extern void system_init(void); 7 | 8 | 9 | //stack pointer 10 | extern uint32_t _stack_ptr; 11 | //.text/code,stored in Flash 12 | extern uint32_t _etext; 13 | //.data,copied into RAM on boot 14 | extern uint32_t _data; 15 | extern uint32_t _edata; 16 | //.bss,unitialized variables 17 | extern uint32_t _bss; 18 | extern uint32_t _ebss; 19 | 20 | 21 | void Reset_Handler(void); 22 | extern void NMI_Handler(void); 23 | extern void HardFault_Handler(void); 24 | extern void MemManage_Handler(void); 25 | extern void BusFault_Handler(void); 26 | extern void UsageFault_Handler(void); 27 | extern void HardFault_Handler(void); 28 | extern void SysTick_Handler(void); 29 | extern void SVC_Handler(void); 30 | extern void DebugMon_Handler(void); 31 | extern void PendSV_Handler(void); 32 | 33 | extern void GPIOPortA_IRQHandler(void); 34 | extern void GPIOPortB_IRQHandler(void); 35 | extern void GPIOPortC_IRQHandler(void); 36 | extern void GPIOPortD_IRQHandler(void); 37 | extern void GPIOPortE_IRQHandler(void); 38 | extern void UART0_IRQHandler(void); 39 | extern void UART1_IRQHandler(void); 40 | extern void SSI0_IRQHandler(void); 41 | extern void I2C0_IRQHandler(void); 42 | extern void PWMFault_IRQHandler(void); 43 | extern void PWMGen0_IRQHandler(void); 44 | extern void PWMGen1_IRQHandler(void); 45 | extern void PWMGen2_IRQHandler(void); 46 | extern void QEI0_IRQHandler(void); 47 | extern void ADCSeq0_IRQHandler(void); 48 | extern void ADCSeq1_IRQHandler(void); 49 | extern void ADCSeq2_IRQHandler(void); 50 | extern void ADCSeq3_IRQHandler(void); 51 | extern void Watchdog_IRQHandler(void); 52 | extern void Timer0A_IRQHandler(void); 53 | extern void Timer0B_IRQHandler(void); 54 | extern void Timer1A_IRQHandler(void); 55 | extern void Timer1B_IRQHandler(void); 56 | extern void Timer2A_IRQHandler(void); 57 | extern void Timer2B_IRQHandler(void); 58 | extern void Comp0_IRQHandler(void); 59 | extern void Comp1_IRQHandler(void); 60 | extern void Comp2_IRQHandler(void); 61 | extern void SysCtrl_IRQHandler(void); 62 | extern void FlashCtrl_IRQHandler(void); 63 | extern void GPIOPortF_IRQHandler(void); 64 | extern void GPIOPortG_IRQHandler(void); 65 | extern void GPIOPortH_IRQHandler(void); 66 | extern void UART2_IRQHandler(void); 67 | extern void SSI1_IRQHandler(void); 68 | extern void Timer3A_IRQHandler(void); 69 | extern void Timer3B_IRQHandler(void); 70 | extern void I2C1_IRQHandler(void); 71 | extern void QEI1_IRQHandler(void); 72 | extern void CAN0_IRQHandler(void); 73 | extern void CAN1_IRQHandler(void); 74 | extern void CAN2_IRQHandler(void); 75 | extern void Hibernate_IRQHandler(void); 76 | extern void USB0_IRQHandler(void); 77 | extern void PWMGen3_IRQHandler(void); 78 | extern void uDMAST_IRQHandler(void); 79 | extern void uDMAError_IRQHandler(void); 80 | extern void ADC1Seq0_IRQHandler(void); 81 | extern void ADC1Seq1_IRQHandler(void); 82 | extern void ADC1Seq2_IRQHandler(void); 83 | extern void ADC1Seq3_IRQHandler(void); 84 | extern void I2S0_IRQHandler(void); 85 | extern void EBI0_IRQHandler(void); 86 | extern void GPIOPortJ_IRQHandler(void); 87 | extern void GPIOPortK_IRQHandler(void); 88 | extern void GPIOPortL_IRQHandler(void); 89 | extern void SSI2_IRQHandler(void); 90 | extern void SSI3_IRQHandler(void); 91 | extern void UART3_IRQHandler(void); 92 | extern void UART4_IRQHandler(void); 93 | extern void UART5_IRQHandler(void); 94 | extern void UART6_IRQHandler(void); 95 | extern void UART7_IRQHandler(void); 96 | extern void I2C2_IRQHandler(void); 97 | extern void I2C3_IRQHandler(void); 98 | extern void Timer4A_IRQHandler(void); 99 | extern void Timer4B_IRQHandler(void); 100 | extern void Timer5A_IRQHandler(void); 101 | extern void Timer5B_IRQHandler(void); 102 | extern void WideTimer0A_IRQHandler(void); 103 | extern void WideTimer0B_IRQHandler(void); 104 | extern void WideTimer1A_IRQHandler(void); 105 | extern void WideTimer1B_IRQHandler(void); 106 | extern void WideTimer2A_IRQHandler(void); 107 | extern void WideTimer2B_IRQHandler(void); 108 | extern void WideTimer3A_IRQHandler(void); 109 | extern void WideTimer3B_IRQHandler(void); 110 | extern void WideTimer4A_IRQHandler(void); 111 | extern void WideTimer4B_IRQHandler(void); 112 | extern void WideTimer5A_IRQHandler(void); 113 | extern void WideTimer5B_IRQHandler(void); 114 | extern void FPU_IRQHandler(void); 115 | extern void PECI0_IRQHandler(void); 116 | extern void LPC0_IRQHandler(void); 117 | extern void I2C4_IRQHandler(void); 118 | extern void I2C5_IRQHandler(void); 119 | extern void GPIOPortM_IRQHandler(void); 120 | extern void GPIOPortN_IRQHandler(void); 121 | extern void QEI2_IRQHandler(void); 122 | extern void Fan0_IRQHandler(void); 123 | extern void GPIOPortP0_IRQHandler(void); 124 | extern void GPIOPortP1_IRQHandler(void); 125 | extern void GPIOPortP2_IRQHandler(void); 126 | extern void GPIOPortP3_IRQHandler(void); 127 | extern void GPIOPortP4_IRQHandler(void); 128 | extern void GPIOPortP5_IRQHandler(void); 129 | extern void GPIOPortP6_IRQHandler(void); 130 | extern void GPIOPortP7_IRQHandler(void); 131 | extern void GPIOPortQ0_IRQHandler(void); 132 | extern void GPIOPortQ1_IRQHandler(void); 133 | extern void GPIOPortQ2_IRQHandler(void); 134 | extern void GPIOPortQ3_IRQHandler(void); 135 | extern void GPIOPortQ4_IRQHandler(void); 136 | extern void GPIOPortQ5_IRQHandler(void); 137 | extern void GPIOPortQ6_IRQHandler(void); 138 | extern void GPIOPortQ7_IRQHandler(void); 139 | extern void GPIOPortR_IRQHandler(void); 140 | extern void GPIOPortS_IRQHandler(void); 141 | extern void PWM1Gen0_IRQHandler(void); 142 | extern void PWM1Gen1_IRQHandler(void); 143 | extern void PWM1Gen2_IRQHandler(void); 144 | extern void PWM1Gen3_IRQHandler(void); 145 | extern void PWM1Fault_IRQHandler(void); 146 | extern void SystemException_ISR(void); 147 | 148 | #endif -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/src/startup.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../include/startup.h" 3 | 4 | // +-----------------------------------------------------------------------------------+ 5 | // + Vector Table + 6 | // +-----------------------------------------------------------------------------------+ 7 | typedef void (*element_t)(void); 8 | 9 | /* Defines a type for the vector table */ 10 | typedef union { 11 | element_t isr; //all ISRs use this type 12 | void *stack_top; //pointer to top of the stack 13 | } vector_table_t; 14 | 15 | // +-----------------------------------------------------------------------------------+ 16 | // + External Variables declaration + 17 | // +-----------------------------------------------------------------------------------+ 18 | 19 | __attribute__((section(".vector_table"))) //marks this vector table as a part of the section "".vector_table" 20 | //in the linker script 21 | const vector_table_t vectors[] = { 22 | {.stack_top = &_stack_ptr}, // 0 Pointer to top of Stack 23 | Reset_Handler, // 1 Reset handler is called when the button is pressed 24 | NMI_Handler, // 2 Non-Maskable Interrupt handler 25 | HardFault_Handler, // 3 Hard Fault Handler 26 | MemManage_Handler, // 4 Memory management fault Handler 27 | BusFault_Handler, // 5 Bus Fault Handler 28 | UsageFault_Handler, // 6 Usage Fault Handler 29 | 0, // 7 Reserved 30 | 0, // 8 Reserved 31 | 0, // 9 Reserved 32 | 0, // 10 Reserved 33 | SVC_Handler, // 11 SuperVisor Call Handler 34 | DebugMon_Handler, // 12 Debug Monitor Handler 35 | 0, // 13 Reserved 36 | PendSV_Handler, // 14 Pendeable interrupt driven request 37 | SysTick_Handler, // 15 SysTick Timer handler 38 | GPIOPortA_IRQHandler, // 16 GPIO Port A Interrupt Service Routine 39 | GPIOPortB_IRQHandler, // 17 GPIO Port B Interrupt Service Routine 40 | GPIOPortC_IRQHandler, // 18 GPIO Port C Interrupt Service Routine 41 | GPIOPortD_IRQHandler, // 19 GPIO Port D Interrupt Service Routine 42 | GPIOPortE_IRQHandler, // 20 GPIO Port C Interrupt Service Routine 43 | UART0_IRQHandler, // 21 UART 0 44 | UART1_IRQHandler, // 22 UART 1 45 | SSI0_IRQHandler, // 23 SPI 0 46 | I2C0_IRQHandler, 47 | PWMFault_IRQHandler, 48 | PWMGen0_IRQHandler, 49 | PWMGen1_IRQHandler, 50 | PWMGen2_IRQHandler, 51 | QEI0_IRQHandler, 52 | ADCSeq0_IRQHandler, 53 | ADCSeq1_IRQHandler, 54 | ADCSeq2_IRQHandler, 55 | ADCSeq3_IRQHandler, 56 | Watchdog_IRQHandler, 57 | Timer0A_IRQHandler, 58 | Timer0B_IRQHandler, 59 | Timer1A_IRQHandler, 60 | Timer1B_IRQHandler, 61 | Timer2A_IRQHandler, 62 | Timer2B_IRQHandler, 63 | Comp0_IRQHandler, 64 | Comp1_IRQHandler, 65 | Comp2_IRQHandler, 66 | SysCtrl_IRQHandler, 67 | FlashCtrl_IRQHandler, 68 | GPIOPortF_IRQHandler, 69 | GPIOPortG_IRQHandler, 70 | GPIOPortH_IRQHandler, 71 | UART2_IRQHandler, 72 | SSI1_IRQHandler, 73 | Timer3A_IRQHandler, 74 | Timer3B_IRQHandler, 75 | I2C1_IRQHandler, 76 | QEI1_IRQHandler, 77 | CAN0_IRQHandler, 78 | CAN1_IRQHandler, 79 | CAN2_IRQHandler, 80 | 0, 81 | Hibernate_IRQHandler, 82 | USB0_IRQHandler, 83 | PWMGen3_IRQHandler, 84 | uDMAST_IRQHandler, 85 | uDMAError_IRQHandler, 86 | ADC1Seq0_IRQHandler, 87 | ADC1Seq1_IRQHandler, 88 | ADC1Seq2_IRQHandler, 89 | ADC1Seq3_IRQHandler, 90 | I2S0_IRQHandler, 91 | EBI0_IRQHandler, 92 | GPIOPortJ_IRQHandler, 93 | GPIOPortK_IRQHandler, 94 | GPIOPortL_IRQHandler, 95 | SSI2_IRQHandler, 96 | SSI3_IRQHandler, 97 | UART3_IRQHandler, 98 | UART4_IRQHandler, 99 | UART5_IRQHandler, 100 | UART6_IRQHandler, 101 | UART7_IRQHandler, 102 | 0, 103 | 0, 104 | 0, 105 | 0, 106 | I2C2_IRQHandler, 107 | I2C3_IRQHandler, 108 | Timer4A_IRQHandler, 109 | Timer4B_IRQHandler, 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, // 95 Reserved 119 | 0, 120 | 0, 121 | 0, 122 | 0, 123 | 0, 124 | 0, 125 | 0, 126 | 0, 127 | 0, 128 | 0, 129 | Timer5A_IRQHandler, 130 | Timer5B_IRQHandler, 131 | WideTimer0A_IRQHandler, 132 | WideTimer0B_IRQHandler, 133 | WideTimer1A_IRQHandler, 134 | WideTimer1B_IRQHandler, 135 | WideTimer2A_IRQHandler, 136 | WideTimer2B_IRQHandler, 137 | WideTimer3A_IRQHandler, 138 | WideTimer3B_IRQHandler, 139 | WideTimer4A_IRQHandler, 140 | WideTimer4B_IRQHandler, 141 | WideTimer5A_IRQHandler, 142 | WideTimer5B_IRQHandler, 143 | SystemException_ISR, 144 | 0, //123 Reserved 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 0, 150 | 0, 151 | 0, 152 | 0, 153 | 0, 154 | 0, 155 | 0, 156 | 0, 157 | 0, 158 | 0, 159 | 0, 160 | 0, 161 | 0, 162 | 0, 163 | 0, 164 | 0, 165 | 0, 166 | 0, 167 | 0, 168 | 0, 169 | 0, 170 | 0, 171 | PWM1Gen0_IRQHandler, 172 | PWM1Gen1_IRQHandler, 173 | PWM1Gen2_IRQHandler, 174 | PWM1Gen3_IRQHandler, 175 | PWM1Fault_IRQHandler, 176 | }; 177 | 178 | // +-----------------------------------------------------------------------------------+ 179 | // + Implementations of Interrupt Service Routines + 180 | // +-----------------------------------------------------------------------------------+ 181 | void Reset_Handler(void) 182 | { 183 | 184 | uint32_t *src, *dest; 185 | 186 | /* copying of the .data values into RAM */ 187 | 188 | src = &_etext; 189 | for (dest = &_data; dest < &_edata;) 190 | { 191 | *dest++ = *src++; 192 | } 193 | 194 | /* initializing .bss values to zero*/ 195 | 196 | for (dest = &_bss; dest < &_ebss;) 197 | { 198 | *dest++ = 0; 199 | } 200 | 201 | /* your program's main() called */ 202 | os_on_startup(); 203 | main(); 204 | } 205 | /*****************************************END OF FILE*********************************************/ 206 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/uart_debug.c: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | * Ceno Real-time Operating System (CenoRTOS) 3 | * version 0.1 4 | * author neroyang 5 | * email nerosoft@outlook.com 6 | * time 2019-01-27 7 | * 8 | * Copyright (C) 2018 CenoCloud. All Rights Reserved 9 | * 10 | * Contract Information: 11 | * https://www.cenocloud.com 12 | ****************************************************/ 13 | 14 | #include "../include/uart_debug.h" 15 | #include "TM4C123GH6PM.h" 16 | 17 | #include "os_config.h" 18 | 19 | 20 | #ifdef __CENO_RTOS_UART_DEBUG_ON__ 21 | void uart_debug_init(void){ 22 | // 1. Enable the UART module using the RCGCUART register (see page 319). 23 | SYSCTL->RCGCUART |= (1<<0); 24 | 25 | // 2. Enable the clock to the appropriate GPIO module via the RCGCGPIO register (see page 315). 26 | // To find out which GPIO port to enable, refer to Table 21-5 on page 1142. 27 | SYSCTL->RCGCGPIO |= (1<<0); 28 | 29 | // 3. Set the GPIO AFSEL bits for the appropriate pins (see page 632). To determine which GPIOs to 30 | // configure, see Table 21-4 on page 1138. 31 | GPIOA->AFSEL = (1<<1) | (1<<0); 32 | 33 | // 4. Configure the GPIO current level and/or slew rate as specified for the mode selected (see 34 | // page 634 and page 642). 35 | 36 | // 5. Configure the PMCn fields in the GPIOPCTL register to assign the UART signals to the appropriate 37 | // pins (see page 649 and Table 21-5 on page 1142). 38 | GPIOA->PCTL = (1<<0) | (1<<4); 39 | 40 | GPIOA->DEN = (1<<0) | (1<<1); 41 | 42 | // BRD = 20,000,000 / (16 * 115,200) = 10.8507 43 | // UARTFBRD[DIVFRAC] = integer(0.8507 * 64 + 0.5) = 5 44 | // BRD = 16,000,000 / (16 * 9,600) = 104.16666666666 45 | // UARTFBRD[DIVFRAC] = integer(0.166667 * 64 + 0.5) = 11 46 | 47 | 48 | // 1. Disable the UART by clearing the UARTEN bit in the UARTCTL register. 49 | UART0->CTL &= ~(1<<0); 50 | 51 | // 2. Write the integer portion of the BRD to the UARTIBRD register. 52 | UART0->IBRD = 104; 53 | 54 | // 3. Write the fractional portion of the BRD to the UARTFBRD register. 55 | UART0->FBRD = 11; 56 | 57 | // 4. Write the desired serial parameters to the UARTLCRH register (in this case, a value of 58 | // 0x0000.0060). 59 | UART0->LCRH = (0x3<<5); 60 | 61 | // 5. Configure the UART clock source by writing to the UARTCC register. 62 | UART0->CC = 0x0; 63 | 64 | // 6. Optionally, configure the µDMA channel (see “Micro Direct Memory Access (μDMA)” on page 547) 65 | // and enable the DMA option(s) in the UARTDMACTL register. 66 | 67 | // 7. Enable the UART by setting the UARTEN bit in the UARTCTL register 68 | UART0->CTL = (1<<0)|(1<<8)|(1<<9); 69 | } 70 | void uart_debug_print(char* str){ 71 | while(*str){ 72 | uart_debug_print_char(*(str++)); 73 | } 74 | } 75 | 76 | void uart_debug_print_char(char c){ 77 | while((UART0->FR & (1<<5)) != 0); 78 | UART0->DR = c; 79 | } 80 | 81 | char uart_debug_reveive_char(void){ 82 | char c; 83 | while((UART0->FR & (1<<4))!=0); 84 | c = UART0->DR; 85 | return c; 86 | } 87 | 88 | void uart_debug_print_number(unsigned int v,unsigned int zero){ 89 | if(v == 0){ 90 | if(zero == 1){ 91 | uart_debug_print_char('0'); 92 | } 93 | } 94 | if(v == 1){ 95 | uart_debug_print_char('1'); 96 | } 97 | if(v == 2){ 98 | uart_debug_print_char('2'); 99 | } 100 | if(v == 3){ 101 | uart_debug_print_char('3'); 102 | } 103 | if(v == 4){ 104 | uart_debug_print_char('4'); 105 | } 106 | if(v == 5){ 107 | uart_debug_print_char('5'); 108 | } 109 | if(v == 6){ 110 | uart_debug_print_char('6'); 111 | } 112 | if(v == 7){ 113 | uart_debug_print_char('7'); 114 | } 115 | if(v == 8){ 116 | uart_debug_print_char('8'); 117 | } 118 | if(v == 9){ 119 | uart_debug_print_char('9'); 120 | } 121 | if(v == 10){ 122 | uart_debug_print_char('a'); 123 | } 124 | if(v == 11){ 125 | uart_debug_print_char('b'); 126 | } 127 | if(v == 12){ 128 | uart_debug_print_char('c'); 129 | } 130 | if(v == 13){ 131 | uart_debug_print_char('d'); 132 | } 133 | if(v == 15){ 134 | uart_debug_print_char('e'); 135 | } 136 | if(v == 15){ 137 | uart_debug_print_char('f'); 138 | } 139 | } 140 | 141 | void uart_debug_print_i32(unsigned int v,unsigned int mode){ 142 | if(mode == 16){ 143 | uart_debug_print_char('0'); 144 | uart_debug_print_char('x'); 145 | for(int i = 0; i<8; i++){ 146 | unsigned int hex = ((v >> ((7-i)*4)) & 0xF); 147 | uart_debug_print_number(hex,1); 148 | } 149 | }else if(mode == 10){ 150 | volatile unsigned int MAX = 1000000000; //max 4294967296 151 | unsigned int zero = 0; 152 | while(MAX != 1){ 153 | unsigned int oct = v / MAX; 154 | if(oct > 0){ 155 | zero = 1; 156 | } 157 | if(zero==0){ 158 | uart_debug_print_number(oct,0); 159 | }else{ 160 | uart_debug_print_number(oct,1); 161 | } 162 | 163 | if(v >= MAX){ 164 | v = v - oct*MAX; 165 | } 166 | MAX = MAX / 10; 167 | } 168 | uart_debug_print_number(v,1); 169 | } 170 | } 171 | 172 | void uart_debug_print_os_register(){ 173 | __asm( 174 | "MOV r0, r15\n\t" 175 | "BL uart_debug_print_i32\n\t" 176 | 177 | "MOV r0, #10\n\t" 178 | "BL uart_debug_print_char\n\t" 179 | 180 | "MOV r0, pc\n\t" 181 | "BL uart_debug_print_i32\n\t" 182 | 183 | "MOV r0, lr\n\t" 184 | "BL uart_debug_print_i32\n\t" 185 | 186 | "MOV r0, r12\n\t" 187 | "BL uart_debug_print_i32\n\t" 188 | 189 | "MOV r0, r3\n\t" 190 | "BL uart_debug_print_i32\n\t" 191 | 192 | "MOV r0, r2\n\t" 193 | "BL uart_debug_print_i32\n\t" 194 | 195 | "MOV r0, r0\n\t" 196 | "BL uart_debug_print_i32\n\t" 197 | 198 | "MOV r0, r11\n\t" 199 | "BL uart_debug_print_i32\n\t" 200 | 201 | "MOV r0, r10\n\t" 202 | "BL uart_debug_print_i32\n\t" 203 | 204 | "MOV r0, r9\n\t" 205 | "BL uart_debug_print_i32\n\t" 206 | 207 | "MOV r0, r8\n\t" 208 | "BL uart_debug_print_i32\n\t" 209 | 210 | "MOV r0, r7\n\t" 211 | "BL uart_debug_print_i32\n\t" 212 | 213 | "MOV r0, r6\n\t" 214 | "BL uart_debug_print_i32\n\t" 215 | 216 | "MOV r0, r5\n\t" 217 | "BL uart_debug_print_i32\n\t" 218 | 219 | "MOV r0, r4\n\t" 220 | "BL uart_debug_print_i32\n\t" 221 | ); 222 | } 223 | #else 224 | void uart_debug_init(void){} 225 | void uart_debug_print(char* str){} 226 | void uart_debug_print_char(char c){} 227 | char uart_debug_reveive_char(void){} 228 | #endif // ! __CENO_RTOS_UART_DEBUG_ON__ 229 | -------------------------------------------------------------------------------- /board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/interrupt.c: -------------------------------------------------------------------------------- 1 | #include "../include/interrupt.h" 2 | #include "../include/bsp.h" 3 | 4 | 5 | 6 | void SysTick_Handler(void){ 7 | os_tick(); 8 | disable_irq(); 9 | os_sched(); 10 | enable_irq(); 11 | if (*l_tickCtr > 0x00){ 12 | (*l_tickCtr)--; 13 | } 14 | } 15 | 16 | void PendSV_Handler(void){ 17 | uart_debug_print("[kernel] PendSV triggered.\n\r"); 18 | os_task_switch_next(); 19 | } 20 | 21 | void NMI_Handler(void){ 22 | 23 | } 24 | 25 | void MemManage_Handler(void){ 26 | 27 | } 28 | 29 | void BusFault_Handler(void){ 30 | 31 | } 32 | 33 | void UsageFault_Handler(void){ 34 | 35 | } 36 | 37 | void HardFault_Handler(void){ 38 | 39 | } 40 | 41 | void SVC_Handler(void){ 42 | 43 | } 44 | 45 | void DebugMon_Handler(void){ 46 | 47 | } 48 | 49 | void GPIOPortA_IRQHandler(void){ 50 | 51 | } 52 | 53 | void GPIOPortB_IRQHandler(void){ 54 | 55 | } 56 | 57 | void GPIOPortC_IRQHandler(void){ 58 | 59 | } 60 | 61 | void GPIOPortD_IRQHandler(void){ 62 | 63 | } 64 | 65 | void GPIOPortE_IRQHandler(void){ 66 | 67 | } 68 | 69 | void UART0_IRQHandler(void){ 70 | 71 | } 72 | 73 | void UART1_IRQHandler(void){ 74 | 75 | } 76 | 77 | void SSI0_IRQHandler(void){ 78 | 79 | } 80 | 81 | void I2C0_IRQHandler(void){ 82 | 83 | } 84 | 85 | void PWMFault_IRQHandler(void){ 86 | 87 | } 88 | 89 | void PWMGen0_IRQHandler(void){ 90 | 91 | } 92 | 93 | void PWMGen1_IRQHandler(void){ 94 | 95 | } 96 | 97 | void PWMGen2_IRQHandler(void){ 98 | 99 | } 100 | 101 | void QEI0_IRQHandler(void){ 102 | 103 | } 104 | 105 | void ADCSeq0_IRQHandler(void){ 106 | 107 | } 108 | 109 | void ADCSeq1_IRQHandler(void){ 110 | 111 | } 112 | 113 | void ADCSeq2_IRQHandler(void){ 114 | 115 | } 116 | 117 | void ADCSeq3_IRQHandler(void){ 118 | 119 | } 120 | 121 | void Watchdog_IRQHandler(void){ 122 | 123 | } 124 | 125 | void Timer0A_IRQHandler(void){ 126 | 127 | } 128 | 129 | void Timer0B_IRQHandler(void){ 130 | 131 | } 132 | 133 | void Timer1A_IRQHandler(void){ 134 | 135 | } 136 | 137 | void Timer1B_IRQHandler(void){ 138 | 139 | } 140 | 141 | void Timer2A_IRQHandler(void){ 142 | 143 | } 144 | 145 | void Timer2B_IRQHandler(void){ 146 | 147 | } 148 | 149 | void Comp0_IRQHandler(void){ 150 | 151 | } 152 | 153 | void Comp1_IRQHandler(void){ 154 | 155 | } 156 | 157 | void Comp2_IRQHandler(void){ 158 | 159 | } 160 | 161 | void SysCtrl_IRQHandler(void){ 162 | 163 | } 164 | 165 | void FlashCtrl_IRQHandler(void){ 166 | 167 | } 168 | 169 | void GPIOPortF_IRQHandler(void){ 170 | 171 | } 172 | 173 | void GPIOPortG_IRQHandler(void){ 174 | 175 | } 176 | 177 | void GPIOPortH_IRQHandler(void){ 178 | 179 | } 180 | 181 | void UART2_IRQHandler(void){ 182 | 183 | } 184 | 185 | void SSI1_IRQHandler(void){ 186 | 187 | } 188 | 189 | void Timer3A_IRQHandler(void){ 190 | 191 | } 192 | 193 | void Timer3B_IRQHandler(void){ 194 | 195 | } 196 | 197 | void I2C1_IRQHandler(void){ 198 | 199 | } 200 | 201 | void QEI1_IRQHandler(void){ 202 | 203 | } 204 | 205 | void CAN0_IRQHandler(void){ 206 | 207 | } 208 | 209 | void CAN1_IRQHandler(void){ 210 | 211 | } 212 | 213 | void CAN2_IRQHandler(void){ 214 | 215 | } 216 | 217 | void Hibernate_IRQHandler(void){ 218 | 219 | } 220 | 221 | void USB0_IRQHandler(void){ 222 | 223 | } 224 | 225 | void PWMGen3_IRQHandler(void){ 226 | 227 | } 228 | void uDMAST_IRQHandler(void){ 229 | 230 | } 231 | void uDMAError_IRQHandler(void){ 232 | 233 | } 234 | void ADC1Seq0_IRQHandler(void){ 235 | 236 | } 237 | void ADC1Seq1_IRQHandler(void){ 238 | 239 | } 240 | void ADC1Seq2_IRQHandler(void){ 241 | 242 | } 243 | void ADC1Seq3_IRQHandler(void){ 244 | 245 | } 246 | void I2S0_IRQHandler(void){ 247 | 248 | } 249 | void EBI0_IRQHandler(void){ 250 | 251 | } 252 | void GPIOPortJ_IRQHandler(void){ 253 | 254 | } 255 | void GPIOPortK_IRQHandler(void){ 256 | 257 | } 258 | void GPIOPortL_IRQHandler(void){ 259 | 260 | } 261 | void SSI2_IRQHandler(void){ 262 | 263 | } 264 | void SSI3_IRQHandler(void){ 265 | 266 | } 267 | void UART3_IRQHandler(void){ 268 | 269 | } 270 | void UART4_IRQHandler(void){ 271 | 272 | } 273 | void UART5_IRQHandler(void){ 274 | 275 | } 276 | void UART6_IRQHandler(void){ 277 | 278 | } 279 | void UART7_IRQHandler(void){ 280 | 281 | } 282 | void I2C2_IRQHandler(void){ 283 | 284 | } 285 | void I2C3_IRQHandler(void){ 286 | 287 | } 288 | void Timer4A_IRQHandler(void){ 289 | 290 | } 291 | void Timer4B_IRQHandler(void){ 292 | 293 | } 294 | void Timer5A_IRQHandler(void){ 295 | 296 | } 297 | void Timer5B_IRQHandler(void){ 298 | 299 | } 300 | void WideTimer0A_IRQHandler(void){ 301 | 302 | } 303 | void WideTimer0B_IRQHandler(void){ 304 | 305 | } 306 | void WideTimer1A_IRQHandler(void){ 307 | 308 | } 309 | void WideTimer1B_IRQHandler(void){ 310 | 311 | } 312 | void WideTimer2A_IRQHandler(void){ 313 | 314 | } 315 | void WideTimer2B_IRQHandler(void){ 316 | 317 | } 318 | void WideTimer3A_IRQHandler(void){ 319 | 320 | } 321 | void WideTimer3B_IRQHandler(void){ 322 | 323 | } 324 | void WideTimer4A_IRQHandler(void){ 325 | 326 | } 327 | void WideTimer4B_IRQHandler(void){ 328 | 329 | } 330 | void WideTimer5A_IRQHandler(void){ 331 | 332 | } 333 | void WideTimer5B_IRQHandler(void){ 334 | 335 | } 336 | void FPU_IRQHandler(void){ 337 | 338 | } 339 | void PECI0_IRQHandler(void){ 340 | 341 | } 342 | void LPC0_IRQHandler(void){ 343 | 344 | } 345 | void I2C4_IRQHandler(void){ 346 | 347 | } 348 | void I2C5_IRQHandler(void){ 349 | 350 | } 351 | void GPIOPortM_IRQHandler(void){ 352 | 353 | } 354 | void GPIOPortN_IRQHandler(void){ 355 | 356 | } 357 | void QEI2_IRQHandler(void){ 358 | 359 | } 360 | void Fan0_IRQHandler(void){ 361 | 362 | } 363 | void GPIOPortP0_IRQHandler(void){ 364 | 365 | } 366 | void GPIOPortP1_IRQHandler(void){ 367 | 368 | } 369 | void GPIOPortP2_IRQHandler(void){ 370 | 371 | } 372 | void GPIOPortP3_IRQHandler(void){ 373 | 374 | } 375 | void GPIOPortP4_IRQHandler(void){ 376 | 377 | } 378 | void GPIOPortP5_IRQHandler(void){ 379 | 380 | } 381 | void GPIOPortP6_IRQHandler(void){ 382 | 383 | } 384 | void GPIOPortP7_IRQHandler(void){ 385 | 386 | } 387 | void GPIOPortQ0_IRQHandler(void){ 388 | 389 | } 390 | void GPIOPortQ1_IRQHandler(void){ 391 | 392 | } 393 | void GPIOPortQ2_IRQHandler(void){ 394 | 395 | } 396 | void GPIOPortQ3_IRQHandler(void){ 397 | 398 | } 399 | void GPIOPortQ4_IRQHandler(void){ 400 | 401 | } 402 | void GPIOPortQ5_IRQHandler(void){ 403 | 404 | } 405 | void GPIOPortQ6_IRQHandler(void){ 406 | 407 | } 408 | void GPIOPortQ7_IRQHandler(void){ 409 | 410 | } 411 | void GPIOPortR_IRQHandler(void){ 412 | 413 | } 414 | void GPIOPortS_IRQHandler(void){ 415 | 416 | } 417 | void PWM1Gen0_IRQHandler(void){ 418 | 419 | } 420 | void PWM1Gen1_IRQHandler(void){ 421 | 422 | } 423 | void PWM1Gen2_IRQHandler(void){ 424 | 425 | } 426 | void PWM1Gen3_IRQHandler(void){ 427 | 428 | } 429 | void PWM1Fault_IRQHandler(void){ 430 | 431 | } 432 | void SystemException_ISR(void){ 433 | 434 | } -------------------------------------------------------------------------------- /kernel/network/mqtt/include/packet.h: -------------------------------------------------------------------------------- 1 | #ifndef __CENO_NET_MQTT_PACKET_H__ 2 | #define __CENO_NET_MQTT_PACKET_H__ 3 | 4 | /** 5 | * MQTT 报文定义 6 | * https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/02-ControlPacketFormat.html 7 | */ 8 | 9 | 10 | 11 | 12 | #define MQTT_PACKET_LEN_BIT_NUM (7) 13 | #define MQTT_PACKET_LEN_MASK (1 << MQTT_PACKET_LEN_BIT_NUM) 14 | 15 | #define MQTT_PACKET_MAX_LEN (4) 16 | 17 | 18 | enum errors 19 | { 20 | MQTTPACKET_BUFFER_TOO_SHORT = -2, 21 | MQTTPACKET_READ_ERROR = -1, 22 | MQTTPACKET_READ_COMPLETE 23 | }; 24 | 25 | /** 26 | * 控制报文类型 27 | */ 28 | typedef enum mqtt_packet_type 29 | { 30 | MQTT_PACKET_TYPE_RESERVED = 0, //Reserved 0 禁止 保留 31 | MQTT_PACKET_TYPE_CONNECT = 1, //CONNECT 1 客户端到服务端 客户端请求连接服务端 32 | MQTT_PACKET_TYPE_CONNACK = 2, //CONNACK 2 服务端到客户端 连接报文确认 33 | MQTT_PACKET_TYPE_PUBLISH = 3, //PUBLISH 3 两个方向都允许 发布消息 34 | MQTT_PACKET_TYPE_PUBACK = 4, //PUBACK 4 两个方向都允许 QoS 1消息发布收到确认 35 | MQTT_PACKET_TYPE_PUBREC = 5, //PUBREC 5 两个方向都允许 发布收到(保证交付第一步) 36 | MQTT_PACKET_TYPE_PUBREL = 6, //PUBREL 6 两个方向都允许 发布释放(保证交付第二步) 37 | MQTT_PACKET_TYPE_PUBCOMP = 7, //PUBCOMP 7 两个方向都允许 QoS 2消息发布完成(保证交互第三步) 38 | MQTT_PACKET_TYPE_SUBSCRIBE = 8, //SUBSCRIBE 8 客户端到服务端 客户端订阅请求 39 | MQTT_PACKET_TYPE_SUBACK = 9, //SUBACK 9 服务端到客户端 订阅请求报文确认 40 | MQTT_PACKET_TYPE_UNSUBSCRIBE = 10, //UNSUBSCRIBE 10 客户端到服务端 客户端取消订阅请求 41 | MQTT_PACKET_TYPE_UNSUBACK = 11, //UNSUBACK 11 服务端到客户端 取消订阅报文确认 42 | MQTT_PACKET_TYPE_PINGREQ = 12, //PINGREQ 12 客户端到服务端 心跳请求 43 | MQTT_PACKET_TYPE_PINGRESP = 13, //PINGRESP 13 服务端到客户端 心跳响应 44 | MQTT_PACKET_TYPE_DISCONNECT = 14, //DISCONNECT 14 客户端到服务端 客户端断开连接 45 | MQTT_PACKET_TYPE_MAX = 15, //Reserved 15 禁止 保留 46 | } mqtt_packet_type_e; 47 | 48 | 49 | #define MQTT_PROTO_NAME_LEN (2) 50 | #define MQTT_PROTO_NAME_SIZE (4) 51 | #define MQTT_PROTO_LEVEL (4) 52 | 53 | #define MQTT_STRING_LEN (2) 54 | #define MQTT_DATA_LEN (2) 55 | #define MQTT_QOS_LEN (1) 56 | 57 | #define MQTT_CONNECT_HEAD_INIT {{0, MQTT_PROTO_NAME_SIZE}, {'M', 'Q', 'T', 'T'}, MQTT_PROTO_LEVEL, {0}, 0} 58 | #define MQTT_CONNECT_OPT_INIT {{{0, MQTT_PROTO_NAME_SIZE}, {'M', 'Q', 'T', 'T'}, MQTT_PROTO_LEVEL, {0}, 0}, {NULL, NULL, NULL, NULL, NULL}} 59 | 60 | 61 | /** 62 | * 固定报头 63 | */ 64 | typedef struct mqtt_fix_head 65 | { 66 | union 67 | { 68 | unsigned char byte; 69 | struct 70 | { 71 | unsigned char retain : 1; //PUBLISH报文的保留标志 72 | unsigned char qos : 2; //PUBLISH报文的服务质量等级 73 | unsigned char dup : 1; //控制报文的重复分发标志 74 | unsigned char type : 4; 75 | } bits; 76 | } mqtt_first_byte_u; 77 | /** 78 | * 剩余长度(Remaining Length)表示当前报文剩余部分的字节数,包括可变报头和负载的数据。 79 | * 剩余长度不包括用于编码剩余长度字段本身的字节数。 80 | * 81 | * 1个字节时,从0(0x00)到127(0x7f) 82 | * 2个字节时,从128(0x80,0x01)到16383(0Xff,0x7f) 83 | * 3个字节时,从16384(0x80,0x80,0x01)到2097151(0xFF,0xFF,0x7F) 84 | * 4个字节时,从2097152(0x80,0x80,0x80,0x01)到268435455(0xFF,0xFF,0xFF,0x7F) 85 | * */ 86 | unsigned char remaining_len[MQTT_PACKET_MAX_LEN]; 87 | } mqtt_fix_head_t; 88 | 89 | 90 | typedef struct mqtt_connect_head 91 | { 92 | unsigned char proto_len[MQTT_PROTO_NAME_LEN]; 93 | unsigned char proto_name[MQTT_PROTO_NAME_SIZE]; 94 | unsigned char proto_level; // 协议级别 95 | union 96 | { 97 | unsigned char connect_flag; 98 | struct 99 | { 100 | unsigned char reserved : 1; 101 | unsigned char clean_session : 1; // 清理会话 102 | unsigned char will_flag : 1; // 遗嘱标志 103 | unsigned char will_qos : 2; // 遗嘱QOS 104 | unsigned char will_retain : 1; // 遗嘱保留 105 | unsigned char psd_flag : 1; // 密码标志符 106 | unsigned char user_name_flag : 1; // 用户名标志符 107 | } bits; // 连接标志位 108 | } mqtt_connect_flag_u; 109 | unsigned short keep_alive; // 保持连接 110 | } mqtt_connect_head_t; 111 | 112 | 113 | /** 114 | * 有效载荷 115 | */ 116 | typedef struct mqtt_connect_payload 117 | { 118 | char *client_id; // 客户端标志符号 119 | char *will_topic; // 遗嘱主题 120 | char *will_msg; // 遗嘱消息 121 | char *user_name; // 用户名 122 | char *password; // 密码 123 | } mqtt_connect_payload_t; 124 | 125 | 126 | typedef struct mqtt_connect_opt 127 | { 128 | mqtt_connect_head_t connect_head; 129 | mqtt_connect_payload_t connect_payload; 130 | } mqtt_connect_opt_t; 131 | 132 | 133 | typedef struct mqtt_publish_head 134 | { 135 | char *topic; 136 | unsigned short topic_len; 137 | unsigned short packet_id; 138 | } mqtt_publish_head_t; 139 | 140 | 141 | typedef struct mqtt_publish_payload 142 | { 143 | char *msg; 144 | size_t msg_len; 145 | } mqtt_publish_payload_t; 146 | 147 | 148 | typedef struct mqtt_publish_opt 149 | { 150 | mqtt_publish_head_t publish_head; 151 | mqtt_publish_payload_t publish_payload; 152 | unsigned char dup; 153 | unsigned char qos; 154 | unsigned char retain; 155 | } mqtt_publish_opt_t; 156 | 157 | 158 | typedef struct mqtt_subscribe_head 159 | { 160 | unsigned short packet_id; 161 | } mqtt_subscribe_head_t; 162 | 163 | 164 | typedef struct mqtt_subscribe_payload 165 | { 166 | unsigned char count; 167 | char **topic; 168 | unsigned char qoss[0]; 169 | } mqtt_subscribe_payload_t; 170 | 171 | 172 | typedef struct mqtt_subscribe_opt 173 | { 174 | mqtt_subscribe_head_t subscribe_head; 175 | mqtt_subscribe_payload_t subscribe_payload; 176 | } mqtt_subscribe_opt_t; 177 | 178 | 179 | typedef struct mqtt_unsubscribe_head 180 | { 181 | unsigned short packet_id; 182 | } mqtt_unsubscribe_head_t; 183 | 184 | 185 | typedef struct mqtt_unsubscribe_payload 186 | { 187 | unsigned char count; 188 | char **topic; 189 | } mqtt_unsubscribe_payload_t; 190 | 191 | 192 | typedef struct mqtt_unsubscribe_opt 193 | { 194 | mqtt_unsubscribe_head_t unsubscribe_head; 195 | mqtt_unsubscribe_payload_t unsubscribe_payload; 196 | } mqtt_unsubscribe_opt_t; 197 | 198 | 199 | typedef struct mqtt_suback_head 200 | { 201 | unsigned short packet_id; 202 | } mqtt_suback_head_t; 203 | 204 | 205 | typedef struct mqtt_suback_payload 206 | { 207 | unsigned char ret_code[0]; 208 | } mqtt_suback_payload_t; 209 | 210 | 211 | typedef struct mqtt_suback_opt 212 | { 213 | unsigned char count; 214 | mqtt_suback_head_t suback_head; 215 | mqtt_suback_payload_t suback_payload; 216 | } mqtt_suback_opt_t; 217 | 218 | 219 | typedef struct mqtt_puback_head 220 | { 221 | unsigned short packet_id; 222 | } mqtt_puback_head_t; 223 | 224 | 225 | typedef struct mqtt_puback_payload 226 | { 227 | unsigned char null[0]; 228 | } mqtt_puback_payload_t; 229 | 230 | 231 | typedef struct mqtt_puback_opt 232 | { 233 | unsigned char type; 234 | mqtt_puback_head_t puback_head; 235 | mqtt_puback_payload_t puback_payload; 236 | } mqtt_puback_opt_t; 237 | 238 | 239 | 240 | int mqtt_encode_fixhead(unsigned char *buf, unsigned char type, unsigned char dup, 241 | unsigned char qos, unsigned char retain, int remaining_len); 242 | int mqtt_encode_connect(unsigned char *buf, int buf_len, mqtt_connect_opt_t *options); 243 | int mqtt_encode_publish(unsigned char *buf, int buf_len, mqtt_publish_opt_t *options); 244 | int mqtt_encode_subscribe(unsigned char *buf, int buf_len, mqtt_subscribe_opt_t *options); 245 | int mqtt_encode_ping(unsigned char *buf, int buf_len); 246 | int mqtt_decode_fixhead(unsigned char *buf, unsigned char *type, unsigned char *dup, 247 | unsigned char *qos, unsigned char *retain, int *remaining_len); 248 | int mqtt_decode_publish(unsigned char *buf, int buf_len, mqtt_publish_opt_t *options); 249 | int mqtt_decode_suback(unsigned char *buf, int buf_len, mqtt_suback_opt_t *options); 250 | int mqtt_encode_puback(unsigned char *buf, int buf_len, mqtt_puback_opt_t *options); 251 | int mqtt_encode_unsubscribe(unsigned char *buf, int buf_len, mqtt_unsubscribe_opt_t *options); 252 | 253 | 254 | #endif // ! __CENO_NET_MQTT_PACKET_H__ -------------------------------------------------------------------------------- /user/asm/os_queue.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "os_queue.c" 12 | .text 13 | .section .rodata 14 | .align 2 15 | .LC0: 16 | .ascii "[queue] queue create : \000" 17 | .align 2 18 | .LC1: 19 | .ascii "\012\015\000" 20 | .align 2 21 | .LC2: 22 | .ascii "[queue] queue create : heap malloc failed!\012\015\000" 23 | .text 24 | .align 2 25 | .global os_queue_create 26 | .syntax unified 27 | .arm 28 | .fpu softvfp 29 | .type os_queue_create, %function 30 | os_queue_create: 31 | @ Function supports interworking. 32 | @ args = 0, pretend = 0, frame = 32 33 | @ frame_needed = 1, uses_anonymous_args = 0 34 | push {fp, lr} 35 | add fp, sp, #4 36 | sub sp, sp, #32 37 | str r0, [fp, #-24] 38 | str r1, [fp, #-28] 39 | str r2, [fp, #-32] 40 | ldr r0, .L6 41 | bl uart_debug_print 42 | ldr r0, [fp, #-28] 43 | bl uart_debug_print 44 | ldr r0, .L6+4 45 | bl uart_debug_print 46 | ldr r3, [fp, #-32] 47 | cmp r3, #0 48 | bne .L2 49 | mov r3, #1 50 | b .L5 51 | .L2: 52 | ldr r3, [fp, #-32] 53 | lsl r3, r3, #2 54 | mov r0, r3 55 | bl os_heap_malloc 56 | mov r2, r0 57 | ldr r3, [fp, #-24] 58 | str r2, [r3, #28] 59 | ldr r3, [fp, #-24] 60 | ldr r3, [r3, #28] 61 | cmp r3, #0 62 | bne .L4 63 | ldr r0, .L6+8 64 | bl uart_debug_print 65 | mov r3, #1 66 | b .L5 67 | .L4: 68 | ldr r3, [fp, #-28] 69 | str r3, [fp, #-12] 70 | mov r3, #4 71 | strb r3, [fp, #-8] 72 | ldr r3, [fp, #-24] 73 | mov ip, r3 74 | sub r3, fp, #20 75 | ldm r3, {r0, r1, r2, r3} 76 | stm ip, {r0, r1, r2, r3} 77 | ldr r3, [fp, #-24] 78 | mov r2, #0 79 | str r2, [r3, #20] 80 | ldr r3, [fp, #-24] 81 | mov r2, #0 82 | str r2, [r3, #24] 83 | ldr r3, [fp, #-24] 84 | ldr r2, [fp, #-32] 85 | str r2, [r3, #16] 86 | mov r3, #0 87 | .L5: 88 | mov r0, r3 89 | sub sp, fp, #4 90 | @ sp needed 91 | pop {fp, lr} 92 | bx lr 93 | .L7: 94 | .align 2 95 | .L6: 96 | .word .LC0 97 | .word .LC1 98 | .word .LC2 99 | .size os_queue_create, .-os_queue_create 100 | .section .rodata 101 | .align 2 102 | .LC3: 103 | .ascii "[queue] queue en : queue is full!\012\015\000" 104 | .global __aeabi_uidivmod 105 | .text 106 | .align 2 107 | .global os_queue_item_en 108 | .syntax unified 109 | .arm 110 | .fpu softvfp 111 | .type os_queue_item_en, %function 112 | os_queue_item_en: 113 | @ Function supports interworking. 114 | @ args = 0, pretend = 0, frame = 8 115 | @ frame_needed = 1, uses_anonymous_args = 0 116 | push {fp, lr} 117 | add fp, sp, #4 118 | sub sp, sp, #8 119 | str r0, [fp, #-8] 120 | str r1, [fp, #-12] 121 | ldr r0, [fp, #-8] 122 | bl os_queue_is_full 123 | mov r3, r0 124 | cmp r3, #1 125 | bne .L9 126 | ldr r0, .L11 127 | bl uart_debug_print 128 | mov r3, #1 129 | b .L10 130 | .L9: 131 | ldr r3, [fp, #-8] 132 | ldr r2, [r3, #28] 133 | ldr r3, [fp, #-8] 134 | ldr r3, [r3, #24] 135 | lsl r3, r3, #2 136 | add r3, r2, r3 137 | ldr r2, [fp, #-12] 138 | str r2, [r3] 139 | ldr r3, [fp, #-8] 140 | ldr r3, [r3, #24] 141 | add r2, r3, #1 142 | ldr r3, [fp, #-8] 143 | ldr r3, [r3, #16] 144 | mov r1, r3 145 | mov r0, r2 146 | bl __aeabi_uidivmod 147 | mov r3, r1 148 | mov r2, r3 149 | ldr r3, [fp, #-8] 150 | str r2, [r3, #24] 151 | mov r3, #0 152 | .L10: 153 | mov r0, r3 154 | sub sp, fp, #4 155 | @ sp needed 156 | pop {fp, lr} 157 | bx lr 158 | .L12: 159 | .align 2 160 | .L11: 161 | .word .LC3 162 | .size os_queue_item_en, .-os_queue_item_en 163 | .section .rodata 164 | .align 2 165 | .LC4: 166 | .ascii "[queue] queue de : queue is empty!\012\015\000" 167 | .text 168 | .align 2 169 | .global os_queue_item_de 170 | .syntax unified 171 | .arm 172 | .fpu softvfp 173 | .type os_queue_item_de, %function 174 | os_queue_item_de: 175 | @ Function supports interworking. 176 | @ args = 0, pretend = 0, frame = 8 177 | @ frame_needed = 1, uses_anonymous_args = 0 178 | push {fp, lr} 179 | add fp, sp, #4 180 | sub sp, sp, #8 181 | str r0, [fp, #-8] 182 | str r1, [fp, #-12] 183 | ldr r0, [fp, #-8] 184 | bl os_queue_is_empty 185 | mov r3, r0 186 | cmp r3, #1 187 | bne .L14 188 | ldr r0, .L16 189 | bl uart_debug_print 190 | mov r3, #1 191 | b .L15 192 | .L14: 193 | ldr r3, [fp, #-8] 194 | ldr r2, [r3, #28] 195 | ldr r3, [fp, #-8] 196 | ldr r3, [r3, #20] 197 | lsl r3, r3, #2 198 | add r3, r2, r3 199 | ldr r2, [r3] 200 | ldr r3, [fp, #-12] 201 | str r2, [r3] 202 | ldr r3, [fp, #-8] 203 | ldr r3, [r3, #20] 204 | add r2, r3, #1 205 | ldr r3, [fp, #-8] 206 | ldr r3, [r3, #16] 207 | mov r1, r3 208 | mov r0, r2 209 | bl __aeabi_uidivmod 210 | mov r3, r1 211 | mov r2, r3 212 | ldr r3, [fp, #-8] 213 | str r2, [r3, #20] 214 | mov r3, #0 215 | .L15: 216 | mov r0, r3 217 | sub sp, fp, #4 218 | @ sp needed 219 | pop {fp, lr} 220 | bx lr 221 | .L17: 222 | .align 2 223 | .L16: 224 | .word .LC4 225 | .size os_queue_item_de, .-os_queue_item_de 226 | .section .rodata 227 | .align 2 228 | .LC5: 229 | .ascii "[queue] queue traverse \012\015\000" 230 | .align 2 231 | .LC6: 232 | .ascii " |--[queue item] at : '\000" 233 | .align 2 234 | .LC7: 235 | .ascii "'\012\015\000" 236 | .text 237 | .align 2 238 | .global os_queue_traverse 239 | .syntax unified 240 | .arm 241 | .fpu softvfp 242 | .type os_queue_traverse, %function 243 | os_queue_traverse: 244 | @ Function supports interworking. 245 | @ args = 0, pretend = 0, frame = 16 246 | @ frame_needed = 1, uses_anonymous_args = 0 247 | push {fp, lr} 248 | add fp, sp, #4 249 | sub sp, sp, #16 250 | str r0, [fp, #-16] 251 | ldr r3, [fp, #-16] 252 | ldr r3, [r3, #20] 253 | str r3, [fp, #-8] 254 | ldr r0, .L21 255 | bl uart_debug_print 256 | b .L19 257 | .L20: 258 | ldr r0, .L21+4 259 | bl uart_debug_print 260 | ldr r3, [fp, #-16] 261 | ldr r2, [r3, #28] 262 | ldr r3, [fp, #-8] 263 | lsl r3, r3, #2 264 | add r3, r2, r3 265 | ldr r3, [r3] 266 | mov r1, #16 267 | mov r0, r3 268 | bl uart_debug_print_i32 269 | ldr r0, .L21+8 270 | bl uart_debug_print 271 | ldr r3, [fp, #-8] 272 | add r2, r3, #1 273 | ldr r3, [fp, #-16] 274 | ldr r3, [r3, #16] 275 | mov r1, r3 276 | mov r0, r2 277 | bl __aeabi_uidivmod 278 | mov r3, r1 279 | str r3, [fp, #-8] 280 | .L19: 281 | ldr r3, [fp, #-16] 282 | ldr r3, [r3, #24] 283 | ldr r2, [fp, #-8] 284 | cmp r2, r3 285 | bne .L20 286 | nop 287 | mov r0, r3 288 | sub sp, fp, #4 289 | @ sp needed 290 | pop {fp, lr} 291 | bx lr 292 | .L22: 293 | .align 2 294 | .L21: 295 | .word .LC5 296 | .word .LC6 297 | .word .LC7 298 | .size os_queue_traverse, .-os_queue_traverse 299 | .align 2 300 | .global os_queue_length 301 | .syntax unified 302 | .arm 303 | .fpu softvfp 304 | .type os_queue_length, %function 305 | os_queue_length: 306 | @ Function supports interworking. 307 | @ args = 0, pretend = 0, frame = 8 308 | @ frame_needed = 1, uses_anonymous_args = 0 309 | push {fp, lr} 310 | add fp, sp, #4 311 | sub sp, sp, #8 312 | str r0, [fp, #-8] 313 | ldr r3, [fp, #-8] 314 | ldr r2, [r3, #24] 315 | ldr r3, [fp, #-8] 316 | ldr r3, [r3, #20] 317 | sub r2, r2, r3 318 | ldr r3, [fp, #-8] 319 | ldr r3, [r3, #16] 320 | add r2, r2, r3 321 | ldr r3, [fp, #-8] 322 | ldr r3, [r3, #16] 323 | mov r1, r3 324 | mov r0, r2 325 | bl __aeabi_uidivmod 326 | mov r3, r1 327 | mov r0, r3 328 | sub sp, fp, #4 329 | @ sp needed 330 | pop {fp, lr} 331 | bx lr 332 | .size os_queue_length, .-os_queue_length 333 | .align 2 334 | .global os_queue_is_empty 335 | .syntax unified 336 | .arm 337 | .fpu softvfp 338 | .type os_queue_is_empty, %function 339 | os_queue_is_empty: 340 | @ Function supports interworking. 341 | @ args = 0, pretend = 0, frame = 8 342 | @ frame_needed = 1, uses_anonymous_args = 0 343 | @ link register save eliminated. 344 | str fp, [sp, #-4]! 345 | add fp, sp, #0 346 | sub sp, sp, #12 347 | str r0, [fp, #-8] 348 | ldr r3, [fp, #-8] 349 | ldr r2, [r3, #20] 350 | ldr r3, [fp, #-8] 351 | ldr r3, [r3, #24] 352 | cmp r2, r3 353 | bne .L26 354 | mov r3, #1 355 | b .L27 356 | .L26: 357 | mov r3, #0 358 | .L27: 359 | mov r0, r3 360 | add sp, fp, #0 361 | @ sp needed 362 | ldr fp, [sp], #4 363 | bx lr 364 | .size os_queue_is_empty, .-os_queue_is_empty 365 | .align 2 366 | .global os_queue_is_full 367 | .syntax unified 368 | .arm 369 | .fpu softvfp 370 | .type os_queue_is_full, %function 371 | os_queue_is_full: 372 | @ Function supports interworking. 373 | @ args = 0, pretend = 0, frame = 8 374 | @ frame_needed = 1, uses_anonymous_args = 0 375 | push {fp, lr} 376 | add fp, sp, #4 377 | sub sp, sp, #8 378 | str r0, [fp, #-8] 379 | ldr r3, [fp, #-8] 380 | ldr r3, [r3, #24] 381 | add r2, r3, #1 382 | ldr r3, [fp, #-8] 383 | ldr r3, [r3, #16] 384 | mov r1, r3 385 | mov r0, r2 386 | bl __aeabi_uidivmod 387 | mov r3, r1 388 | mov r2, r3 389 | ldr r3, [fp, #-8] 390 | ldr r3, [r3, #20] 391 | cmp r2, r3 392 | bne .L29 393 | mov r3, #1 394 | b .L30 395 | .L29: 396 | mov r3, #0 397 | .L30: 398 | mov r0, r3 399 | sub sp, fp, #4 400 | @ sp needed 401 | pop {fp, lr} 402 | bx lr 403 | .size os_queue_is_full, .-os_queue_is_full 404 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 405 | -------------------------------------------------------------------------------- /user/asm/os_task.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "os_task.c" 12 | .text 13 | .comm osTaskCurr,4,4 14 | .comm osTaskNext,4,4 15 | .section .rodata 16 | .align 2 17 | .LC0: 18 | .ascii "[task] create task : '\000" 19 | .align 2 20 | .LC1: 21 | .ascii "'\012\015\000" 22 | .align 2 23 | .LC2: 24 | .ascii "[task] task add to queue failed!\012\015\000" 25 | .align 2 26 | .LC3: 27 | .ascii "[task] task '\000" 28 | .align 2 29 | .LC4: 30 | .ascii "' add to queue '\000" 31 | .align 2 32 | .LC5: 33 | .ascii "'.\012\015\000" 34 | .text 35 | .align 2 36 | .global os_task_create 37 | .syntax unified 38 | .arm 39 | .fpu softvfp 40 | .type os_task_create, %function 41 | os_task_create: 42 | @ Function supports interworking. 43 | @ args = 8, pretend = 0, frame = 32 44 | @ frame_needed = 1, uses_anonymous_args = 0 45 | push {fp, lr} 46 | add fp, sp, #4 47 | sub sp, sp, #32 48 | str r0, [fp, #-24] 49 | str r1, [fp, #-28] 50 | str r2, [fp, #-32] 51 | str r3, [fp, #-36] 52 | ldr r0, .L6 53 | bl uart_debug_print 54 | ldr r0, [fp, #-28] 55 | bl uart_debug_print 56 | ldr r0, .L6+4 57 | bl uart_debug_print 58 | ldr r2, [fp, #-36] 59 | ldr r3, [fp, #4] 60 | add r3, r2, r3 61 | bic r3, r3, #7 62 | str r3, [fp, #-8] 63 | ldr r3, [fp, #-8] 64 | sub r3, r3, #4 65 | str r3, [fp, #-8] 66 | ldr r3, [fp, #-8] 67 | mov r2, #16777216 68 | str r2, [r3] 69 | ldr r3, [fp, #-8] 70 | sub r3, r3, #4 71 | str r3, [fp, #-8] 72 | ldr r2, [fp, #8] 73 | ldr r3, [fp, #-8] 74 | str r2, [r3] 75 | ldr r3, [fp, #-8] 76 | sub r3, r3, #4 77 | str r3, [fp, #-8] 78 | ldr r3, [fp, #-8] 79 | mov r2, #14 80 | str r2, [r3] 81 | ldr r3, [fp, #-8] 82 | sub r3, r3, #4 83 | str r3, [fp, #-8] 84 | ldr r3, [fp, #-8] 85 | mov r2, #12 86 | str r2, [r3] 87 | ldr r3, [fp, #-8] 88 | sub r3, r3, #4 89 | str r3, [fp, #-8] 90 | ldr r3, [fp, #-8] 91 | mov r2, #3 92 | str r2, [r3] 93 | ldr r3, [fp, #-8] 94 | sub r3, r3, #4 95 | str r3, [fp, #-8] 96 | ldr r3, [fp, #-8] 97 | mov r2, #2 98 | str r2, [r3] 99 | ldr r3, [fp, #-8] 100 | sub r3, r3, #4 101 | str r3, [fp, #-8] 102 | ldr r3, [fp, #-8] 103 | mov r2, #1 104 | str r2, [r3] 105 | ldr r3, [fp, #-8] 106 | sub r3, r3, #4 107 | str r3, [fp, #-8] 108 | ldr r3, [fp, #-8] 109 | mov r2, #0 110 | str r2, [r3] 111 | ldr r3, [fp, #-8] 112 | sub r3, r3, #4 113 | str r3, [fp, #-8] 114 | ldr r3, [fp, #-8] 115 | mov r2, #11 116 | str r2, [r3] 117 | ldr r3, [fp, #-8] 118 | sub r3, r3, #4 119 | str r3, [fp, #-8] 120 | ldr r3, [fp, #-8] 121 | mov r2, #10 122 | str r2, [r3] 123 | ldr r3, [fp, #-8] 124 | sub r3, r3, #4 125 | str r3, [fp, #-8] 126 | ldr r3, [fp, #-8] 127 | mov r2, #9 128 | str r2, [r3] 129 | ldr r3, [fp, #-8] 130 | sub r3, r3, #4 131 | str r3, [fp, #-8] 132 | ldr r3, [fp, #-8] 133 | mov r2, #8 134 | str r2, [r3] 135 | ldr r3, [fp, #-8] 136 | sub r3, r3, #4 137 | str r3, [fp, #-8] 138 | ldr r3, [fp, #-8] 139 | mov r2, #7 140 | str r2, [r3] 141 | ldr r3, [fp, #-8] 142 | sub r3, r3, #4 143 | str r3, [fp, #-8] 144 | ldr r3, [fp, #-8] 145 | mov r2, #6 146 | str r2, [r3] 147 | ldr r3, [fp, #-8] 148 | sub r3, r3, #4 149 | str r3, [fp, #-8] 150 | ldr r3, [fp, #-8] 151 | mov r2, #5 152 | str r2, [r3] 153 | ldr r3, [fp, #-8] 154 | sub r3, r3, #4 155 | str r3, [fp, #-8] 156 | ldr r3, [fp, #-8] 157 | mov r2, #4 158 | str r2, [r3] 159 | ldr r3, [fp, #-24] 160 | ldr r2, [fp, #-8] 161 | str r2, [r3] 162 | ldr r3, [fp, #-36] 163 | sub r3, r3, #1 164 | bic r3, r3, #7 165 | add r3, r3, #8 166 | str r3, [fp, #-12] 167 | ldr r3, [fp, #-8] 168 | sub r3, r3, #4 169 | str r3, [fp, #-8] 170 | b .L2 171 | .L3: 172 | ldr r3, [fp, #-8] 173 | ldr r2, .L6+8 174 | str r2, [r3] 175 | ldr r3, [fp, #-8] 176 | sub r3, r3, #4 177 | str r3, [fp, #-8] 178 | .L2: 179 | ldr r2, [fp, #-8] 180 | ldr r3, [fp, #-12] 181 | cmp r2, r3 182 | bcs .L3 183 | ldr r3, [fp, #-24] 184 | mov r2, #1 185 | str r2, [r3, #12] 186 | ldr r3, [fp, #-24] 187 | ldr r2, [fp, #-28] 188 | str r2, [r3, #24] 189 | ldr r3, [fp, #-24] 190 | mov r2, #0 191 | str r2, [r3, #36] 192 | ldr r3, [fp, #-24] 193 | ldr r2, [fp, #-32] 194 | str r2, [r3, #40] 195 | ldr r3, [fp, #-32] 196 | cmp r3, #0 197 | beq .L4 198 | ldr r3, [fp, #-24] 199 | mov r2, #2 200 | strb r2, [r3, #32] 201 | .L4: 202 | ldr r1, [fp, #-24] 203 | ldr r0, .L6+12 204 | bl os_queue_item_en 205 | mov r3, r0 206 | strb r3, [fp, #-13] 207 | ldrb r3, [fp, #-13] @ zero_extendqisi2 208 | cmp r3, #1 209 | bne .L5 210 | ldr r0, .L6+16 211 | bl uart_debug_print 212 | .L5: 213 | ldr r0, .L6+20 214 | bl uart_debug_print 215 | ldr r3, [fp, #-24] 216 | ldr r3, [r3, #24] 217 | mov r0, r3 218 | bl uart_debug_print 219 | ldr r0, .L6+24 220 | bl uart_debug_print 221 | ldr r3, .L6+12 222 | ldr r3, [r3, #8] 223 | mov r0, r3 224 | bl uart_debug_print 225 | ldr r0, .L6+28 226 | bl uart_debug_print 227 | nop 228 | mov r0, r3 229 | sub sp, fp, #4 230 | @ sp needed 231 | pop {fp, lr} 232 | bx lr 233 | .L7: 234 | .align 2 235 | .L6: 236 | .word .LC0 237 | .word .LC1 238 | .word -559038737 239 | .word osTaskQueue 240 | .word .LC2 241 | .word .LC3 242 | .word .LC4 243 | .word .LC5 244 | .size os_task_create, .-os_task_create 245 | .section .rodata 246 | .align 2 247 | .LC6: 248 | .ascii "[task] task switch next : '\000" 249 | .align 2 250 | .LC7: 251 | .ascii "[task] task current is null.\012\015\000" 252 | .align 2 253 | .LC8: 254 | .ascii "[task] task next is null.\012\015\000" 255 | .align 2 256 | .LC9: 257 | .ascii "[task] contex switch finished. never be here!!!\012" 258 | .ascii "\015\000" 259 | .text 260 | .align 2 261 | .global os_task_switch_next 262 | .syntax unified 263 | .arm 264 | .fpu softvfp 265 | .type os_task_switch_next, %function 266 | os_task_switch_next: 267 | @ Function supports interworking. 268 | @ args = 0, pretend = 0, frame = 0 269 | @ frame_needed = 1, uses_anonymous_args = 0 270 | push {fp, lr} 271 | add fp, sp, #4 272 | ldr r0, .L11 273 | bl uart_debug_print 274 | ldr r3, .L11+4 275 | ldr r3, [r3] 276 | ldr r3, [r3, #24] 277 | mov r0, r3 278 | bl uart_debug_print 279 | ldr r0, .L11+8 280 | bl uart_debug_print 281 | ldr r3, .L11+12 282 | ldr r3, [r3] 283 | cmp r3, #0 284 | bne .L9 285 | ldr r0, .L11+16 286 | bl uart_debug_print 287 | .L9: 288 | ldr r3, .L11+4 289 | ldr r3, [r3] 290 | cmp r3, #0 291 | bne .L10 292 | ldr r0, .L11+20 293 | bl uart_debug_print 294 | .L10: 295 | .syntax divided 296 | @ 124 "/Users/neroyang/project/Ceno-RTOS/kernel/ceno/src/os_task.c" 1 297 | CPSID I 298 | LDR r3,.L11+12 299 | LDR r3,[r3,#0x00] 300 | CBZ r3,.PendSV_restore 301 | PUSH {r4,r11} 302 | LDR r3,.L11+12 303 | LDR r3,[r3] 304 | STR sp,[r3] 305 | .PendSV_restore: 306 | LDR r3,.L11+4 307 | LDR r3, [r3] 308 | LDR sp, [r3] 309 | LDR r3,.L11+4 310 | LDR r3,[r3] 311 | LDR r2,.L11+12 312 | STR r3,[r2] 313 | POP {r4,r11} 314 | CPSIE I 315 | MOV r0,lr 316 | BX lr 317 | @ 0 "" 2 318 | .arm 319 | .syntax unified 320 | ldr r0, .L11+24 321 | bl uart_debug_print 322 | nop 323 | mov r0, r3 324 | sub sp, fp, #4 325 | @ sp needed 326 | pop {fp, lr} 327 | bx lr 328 | .L12: 329 | .align 2 330 | .L11: 331 | .word .LC6 332 | .word osTaskNext 333 | .word .LC5 334 | .word osTaskCurr 335 | .word .LC7 336 | .word .LC8 337 | .word .LC9 338 | .size os_task_switch_next, .-os_task_switch_next 339 | .align 2 340 | .global os_task_exit 341 | .syntax unified 342 | .arm 343 | .fpu softvfp 344 | .type os_task_exit, %function 345 | os_task_exit: 346 | @ Function supports interworking. 347 | @ args = 0, pretend = 0, frame = 0 348 | @ frame_needed = 1, uses_anonymous_args = 0 349 | @ link register save eliminated. 350 | str fp, [sp, #-4]! 351 | add fp, sp, #0 352 | nop 353 | mov r0, r3 354 | add sp, fp, #0 355 | @ sp needed 356 | ldr fp, [sp], #4 357 | bx lr 358 | .size os_task_exit, .-os_task_exit 359 | .align 2 360 | .global os_task_switch_context 361 | .syntax unified 362 | .arm 363 | .fpu softvfp 364 | .type os_task_switch_context, %function 365 | os_task_switch_context: 366 | @ Function supports interworking. 367 | @ args = 0, pretend = 0, frame = 8 368 | @ frame_needed = 1, uses_anonymous_args = 0 369 | @ link register save eliminated. 370 | str fp, [sp, #-4]! 371 | add fp, sp, #0 372 | sub sp, sp, #12 373 | str r0, [fp, #-8] 374 | ldr r2, .L15 375 | ldr r3, [fp, #-8] 376 | str r3, [r2] 377 | nop 378 | mov r0, r3 379 | add sp, fp, #0 380 | @ sp needed 381 | ldr fp, [sp], #4 382 | bx lr 383 | .L16: 384 | .align 2 385 | .L15: 386 | .word osTaskCurr 387 | .size os_task_switch_context, .-os_task_switch_context 388 | .align 2 389 | .global delay 390 | .syntax unified 391 | .arm 392 | .fpu softvfp 393 | .type delay, %function 394 | delay: 395 | @ Function supports interworking. 396 | @ args = 0, pretend = 0, frame = 8 397 | @ frame_needed = 1, uses_anonymous_args = 0 398 | @ link register save eliminated. 399 | str fp, [sp, #-4]! 400 | add fp, sp, #0 401 | sub sp, sp, #12 402 | str r0, [fp, #-8] 403 | ldr r3, .L18 404 | ldr r3, [r3] 405 | mov r2, #3 406 | strb r2, [r3, #32] 407 | ldr r3, .L18 408 | ldr r3, [r3] 409 | ldr r2, [fp, #-8] 410 | str r2, [r3, #36] 411 | nop 412 | add sp, fp, #0 413 | @ sp needed 414 | ldr fp, [sp], #4 415 | bx lr 416 | .L19: 417 | .align 2 418 | .L18: 419 | .word osTaskCurr 420 | .size delay, .-delay 421 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 422 | -------------------------------------------------------------------------------- /user/asm/system_TM4C123GH6PM.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "system_TM4C123GH6PM.c" 12 | .text 13 | .global SystemCoreClock 14 | .data 15 | .align 2 16 | .type SystemCoreClock, %object 17 | .size SystemCoreClock, 4 18 | SystemCoreClock: 19 | .word 50000000 20 | .text 21 | .align 2 22 | .syntax unified 23 | .arm 24 | .fpu softvfp 25 | .type getOscClk, %function 26 | getOscClk: 27 | @ Function supports interworking. 28 | @ args = 0, pretend = 0, frame = 16 29 | @ frame_needed = 1, uses_anonymous_args = 0 30 | @ link register save eliminated. 31 | str fp, [sp, #-4]! 32 | add fp, sp, #0 33 | sub sp, sp, #20 34 | str r0, [fp, #-16] 35 | str r1, [fp, #-20] 36 | ldr r3, .L35 37 | str r3, [fp, #-8] 38 | ldr r3, [fp, #-20] 39 | cmp r3, #3 40 | ldrls pc, [pc, r3, asl #2] 41 | b .L2 42 | .L4: 43 | .word .L3 44 | .word .L5 45 | .word .L6 46 | .word .L7 47 | .L3: 48 | ldr r3, [fp, #-16] 49 | cmp r3, #22 50 | ldrls pc, [pc, r3, asl #2] 51 | b .L34 52 | .L10: 53 | .word .L9 54 | .word .L11 55 | .word .L12 56 | .word .L13 57 | .word .L14 58 | .word .L15 59 | .word .L16 60 | .word .L17 61 | .word .L18 62 | .word .L19 63 | .word .L20 64 | .word .L21 65 | .word .L22 66 | .word .L23 67 | .word .L24 68 | .word .L25 69 | .word .L26 70 | .word .L27 71 | .word .L28 72 | .word .L29 73 | .word .L30 74 | .word .L31 75 | .word .L32 76 | .L9: 77 | ldr r3, .L35+4 78 | str r3, [fp, #-8] 79 | b .L8 80 | .L11: 81 | ldr r3, .L35+8 82 | str r3, [fp, #-8] 83 | b .L8 84 | .L12: 85 | ldr r3, .L35+12 86 | str r3, [fp, #-8] 87 | b .L8 88 | .L13: 89 | mov r3, #2457600 90 | str r3, [fp, #-8] 91 | b .L8 92 | .L14: 93 | ldr r3, .L35+16 94 | str r3, [fp, #-8] 95 | b .L8 96 | .L15: 97 | mov r3, #3686400 98 | str r3, [fp, #-8] 99 | b .L8 100 | .L16: 101 | ldr r3, .L35+20 102 | str r3, [fp, #-8] 103 | b .L8 104 | .L17: 105 | mov r3, #4096000 106 | str r3, [fp, #-8] 107 | b .L8 108 | .L18: 109 | mov r3, #4915200 110 | str r3, [fp, #-8] 111 | b .L8 112 | .L19: 113 | ldr r3, .L35+24 114 | str r3, [fp, #-8] 115 | b .L8 116 | .L20: 117 | ldr r3, .L35+28 118 | str r3, [fp, #-8] 119 | b .L8 120 | .L21: 121 | ldr r3, .L35+32 122 | str r3, [fp, #-8] 123 | b .L8 124 | .L22: 125 | ldr r3, .L35+36 126 | str r3, [fp, #-8] 127 | b .L8 128 | .L23: 129 | ldr r3, .L35+40 130 | str r3, [fp, #-8] 131 | b .L8 132 | .L24: 133 | ldr r3, .L35+44 134 | str r3, [fp, #-8] 135 | b .L8 136 | .L25: 137 | mov r3, #8192000 138 | str r3, [fp, #-8] 139 | b .L8 140 | .L26: 141 | ldr r3, .L35+48 142 | str r3, [fp, #-8] 143 | b .L8 144 | .L27: 145 | ldr r3, .L35 146 | str r3, [fp, #-8] 147 | b .L8 148 | .L28: 149 | ldr r3, .L35+52 150 | str r3, [fp, #-8] 151 | b .L8 152 | .L29: 153 | ldr r3, .L35+56 154 | str r3, [fp, #-8] 155 | b .L8 156 | .L30: 157 | ldr r3, .L35+60 158 | str r3, [fp, #-8] 159 | b .L8 160 | .L31: 161 | ldr r3, .L35+64 162 | str r3, [fp, #-8] 163 | b .L8 164 | .L32: 165 | mov r3, #16384000 166 | str r3, [fp, #-8] 167 | nop 168 | .L8: 169 | b .L34 170 | .L5: 171 | ldr r3, .L35 172 | str r3, [fp, #-8] 173 | b .L2 174 | .L6: 175 | ldr r3, .L35+68 176 | str r3, [fp, #-8] 177 | b .L2 178 | .L7: 179 | ldr r3, .L35+72 180 | str r3, [fp, #-8] 181 | b .L2 182 | .L34: 183 | nop 184 | .L2: 185 | ldr r3, [fp, #-8] 186 | mov r0, r3 187 | add sp, fp, #0 188 | @ sp needed 189 | ldr fp, [sp], #4 190 | bx lr 191 | .L36: 192 | .align 2 193 | .L35: 194 | .word 12000000 195 | .word 1000000 196 | .word 1843200 197 | .word 2000000 198 | .word 3579545 199 | .word 4000000 200 | .word 5000000 201 | .word 5120000 202 | .word 6000000 203 | .word 6144000 204 | .word 7372800 205 | .word 8000000 206 | .word 10000000 207 | .word 12288000 208 | .word 13560000 209 | .word 14318180 210 | .word 16000000 211 | .word 3000000 212 | .word 30000 213 | .size getOscClk, .-getOscClk 214 | .global __aeabi_uidiv 215 | .align 2 216 | .global SystemCoreClockUpdate 217 | .syntax unified 218 | .arm 219 | .fpu softvfp 220 | .type SystemCoreClockUpdate, %function 221 | SystemCoreClockUpdate: 222 | @ Function supports interworking. 223 | @ args = 0, pretend = 0, frame = 8 224 | @ frame_needed = 1, uses_anonymous_args = 0 225 | push {fp, lr} 226 | add fp, sp, #4 227 | sub sp, sp, #8 228 | ldr r3, .L48 229 | ldr r3, [r3, #96] 230 | str r3, [fp, #-8] 231 | ldr r3, .L48 232 | ldr r3, [r3, #112] 233 | str r3, [fp, #-12] 234 | ldr r3, [fp, #-12] 235 | cmp r3, #0 236 | bge .L38 237 | ldr r3, [fp, #-12] 238 | and r3, r3, #2048 239 | cmp r3, #0 240 | beq .L39 241 | ldr r3, [fp, #-8] 242 | lsr r3, r3, #6 243 | and r2, r3, #15 244 | ldr r3, [fp, #-12] 245 | lsr r3, r3, #4 246 | and r3, r3, #7 247 | mov r1, r3 248 | mov r0, r2 249 | bl getOscClk 250 | mov r2, r0 251 | ldr r3, .L48+4 252 | str r2, [r3] 253 | b .L40 254 | .L39: 255 | ldr r3, .L48+4 256 | ldr r2, .L48+8 257 | str r2, [r3] 258 | .L40: 259 | ldr r3, [fp, #-8] 260 | and r3, r3, #4194304 261 | cmp r3, #0 262 | beq .L47 263 | ldr r3, [fp, #-12] 264 | and r3, r3, #2048 265 | cmp r3, #0 266 | beq .L42 267 | ldr r3, .L48+4 268 | ldr r2, [r3] 269 | ldr r3, [fp, #-12] 270 | lsr r3, r3, #23 271 | and r3, r3, #63 272 | add r3, r3, #1 273 | mov r1, r3 274 | mov r0, r2 275 | bl __aeabi_uidiv 276 | mov r3, r0 277 | mov r2, r3 278 | ldr r3, .L48+4 279 | str r2, [r3] 280 | b .L47 281 | .L42: 282 | ldr r3, .L48+4 283 | ldr r2, [r3] 284 | ldr r3, [fp, #-12] 285 | lsr r3, r3, #23 286 | and r3, r3, #63 287 | add r3, r3, #1 288 | mov r1, r3 289 | mov r0, r2 290 | bl __aeabi_uidiv 291 | mov r3, r0 292 | lsr r3, r3, #1 293 | ldr r2, .L48+4 294 | str r3, [r2] 295 | b .L47 296 | .L38: 297 | ldr r3, [fp, #-8] 298 | and r3, r3, #2048 299 | cmp r3, #0 300 | beq .L44 301 | ldr r3, [fp, #-8] 302 | lsr r3, r3, #6 303 | and r2, r3, #31 304 | ldr r3, [fp, #-8] 305 | lsr r3, r3, #4 306 | and r3, r3, #3 307 | mov r1, r3 308 | mov r0, r2 309 | bl getOscClk 310 | mov r2, r0 311 | ldr r3, .L48+4 312 | str r2, [r3] 313 | b .L45 314 | .L44: 315 | ldr r3, .L48+4 316 | ldr r2, .L48+8 317 | str r2, [r3] 318 | .L45: 319 | ldr r3, [fp, #-8] 320 | and r3, r3, #4194304 321 | cmp r3, #0 322 | beq .L47 323 | ldr r3, [fp, #-8] 324 | and r3, r3, #2048 325 | cmp r3, #0 326 | beq .L46 327 | ldr r3, .L48+4 328 | ldr r2, [r3] 329 | ldr r3, [fp, #-8] 330 | lsr r3, r3, #23 331 | and r3, r3, #15 332 | add r3, r3, #1 333 | mov r1, r3 334 | mov r0, r2 335 | bl __aeabi_uidiv 336 | mov r3, r0 337 | mov r2, r3 338 | ldr r3, .L48+4 339 | str r2, [r3] 340 | b .L47 341 | .L46: 342 | ldr r3, .L48+4 343 | ldr r2, [r3] 344 | ldr r3, [fp, #-8] 345 | lsr r3, r3, #23 346 | and r3, r3, #15 347 | add r3, r3, #1 348 | mov r1, r3 349 | mov r0, r2 350 | bl __aeabi_uidiv 351 | mov r3, r0 352 | lsr r3, r3, #1 353 | ldr r2, .L48+4 354 | str r3, [r2] 355 | .L47: 356 | nop 357 | sub sp, fp, #4 358 | @ sp needed 359 | pop {fp, lr} 360 | bx lr 361 | .L49: 362 | .align 2 363 | .L48: 364 | .word 1074782208 365 | .word SystemCoreClock 366 | .word 400000000 367 | .size SystemCoreClockUpdate, .-SystemCoreClockUpdate 368 | .align 2 369 | .global SystemInit 370 | .syntax unified 371 | .arm 372 | .fpu softvfp 373 | .type SystemInit, %function 374 | SystemInit: 375 | @ Function supports interworking. 376 | @ args = 0, pretend = 0, frame = 8 377 | @ frame_needed = 1, uses_anonymous_args = 0 378 | @ link register save eliminated. 379 | str fp, [sp, #-4]! 380 | add fp, sp, #0 381 | sub sp, sp, #12 382 | ldr r3, .L58 383 | ldr r3, [r3, #136] 384 | ldr r2, .L58 385 | orr r3, r3, #15728640 386 | str r3, [r2, #136] 387 | ldr r3, .L58+4 388 | ldr r2, .L58+8 389 | str r2, [r3, #112] 390 | ldr r3, .L58+4 391 | ldr r2, .L58+12 392 | str r2, [r3, #96] 393 | ldr r3, .L58+4 394 | ldr r2, .L58+16 395 | str r2, [r3, #96] 396 | ldr r3, .L58+4 397 | ldr r2, .L58+20 398 | str r2, [r3, #112] 399 | mov r3, #0 400 | str r3, [fp, #-8] 401 | b .L51 402 | .L52: 403 | ldr r3, [fp, #-8] 404 | add r3, r3, #1 405 | str r3, [fp, #-8] 406 | .L51: 407 | ldr r3, [fp, #-8] 408 | cmp r3, #1000 409 | bcc .L52 410 | ldr r3, .L58+4 411 | ldr r2, .L58+24 412 | str r2, [r3, #96] 413 | ldr r3, .L58+4 414 | ldr r2, .L58+28 415 | str r2, [r3, #112] 416 | mov r3, #0 417 | str r3, [fp, #-8] 418 | b .L53 419 | .L54: 420 | ldr r3, [fp, #-8] 421 | add r3, r3, #1 422 | str r3, [fp, #-8] 423 | .L53: 424 | ldr r3, [fp, #-8] 425 | cmp r3, #1000 426 | bcc .L54 427 | ldr r3, .L58+4 428 | ldr r2, .L58+32 429 | str r2, [r3, #96] 430 | nop 431 | .L55: 432 | ldr r3, .L58+4 433 | ldr r3, [r3, #80] 434 | and r3, r3, #64 435 | cmp r3, #64 436 | bne .L55 437 | ldr r3, .L58+4 438 | ldr r2, .L58+36 439 | str r2, [r3, #96] 440 | ldr r3, .L58+4 441 | mov r2, #25165824 442 | str r2, [r3, #112] 443 | mov r3, #0 444 | str r3, [fp, #-8] 445 | b .L56 446 | .L57: 447 | ldr r3, [fp, #-8] 448 | add r3, r3, #1 449 | str r3, [fp, #-8] 450 | .L56: 451 | ldr r3, [fp, #-8] 452 | ldr r2, .L58+40 453 | cmp r3, r2 454 | bls .L57 455 | nop 456 | add sp, fp, #0 457 | @ sp needed 458 | ldr fp, [sp], #4 459 | bx lr 460 | .L59: 461 | .align 2 462 | .L58: 463 | .word -536810240 464 | .word 1074782208 465 | .word 125839376 466 | .word 126761681 467 | .word 27143490 468 | .word 25176064 469 | .word 27135298 470 | .word 25167872 471 | .word 31329602 472 | .word 31327554 473 | .word 9999 474 | .size SystemInit, .-SystemInit 475 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 476 | -------------------------------------------------------------------------------- /user/asm/bsp.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "bsp.c" 12 | .text 13 | .align 2 14 | .syntax unified 15 | .arm 16 | .fpu softvfp 17 | .type __NVIC_SetPriority, %function 18 | __NVIC_SetPriority: 19 | @ Function supports interworking. 20 | @ args = 0, pretend = 0, frame = 8 21 | @ frame_needed = 1, uses_anonymous_args = 0 22 | @ link register save eliminated. 23 | str fp, [sp, #-4]! 24 | add fp, sp, #0 25 | sub sp, sp, #12 26 | mov r3, r0 27 | str r1, [fp, #-12] 28 | strh r3, [fp, #-6] @ movhi 29 | ldrsh r3, [fp, #-6] 30 | cmp r3, #0 31 | blt .L2 32 | ldr r3, [fp, #-12] 33 | and r2, r3, #255 34 | ldr r1, .L5 35 | ldrsh r3, [fp, #-6] 36 | lsl r2, r2, #5 37 | and r2, r2, #255 38 | add r3, r1, r3 39 | strb r2, [r3, #768] 40 | b .L4 41 | .L2: 42 | ldr r3, [fp, #-12] 43 | and r2, r3, #255 44 | ldr r1, .L5+4 45 | ldrh r3, [fp, #-6] 46 | and r3, r3, #15 47 | sub r3, r3, #4 48 | lsl r2, r2, #5 49 | and r2, r2, #255 50 | add r3, r1, r3 51 | strb r2, [r3, #24] 52 | .L4: 53 | nop 54 | add sp, fp, #0 55 | @ sp needed 56 | ldr fp, [sp], #4 57 | bx lr 58 | .L6: 59 | .align 2 60 | .L5: 61 | .word -536813312 62 | .word -536810240 63 | .size __NVIC_SetPriority, .-__NVIC_SetPriority 64 | .align 2 65 | .syntax unified 66 | .arm 67 | .fpu softvfp 68 | .type SysTick_Config, %function 69 | SysTick_Config: 70 | @ Function supports interworking. 71 | @ args = 0, pretend = 0, frame = 8 72 | @ frame_needed = 1, uses_anonymous_args = 0 73 | push {fp, lr} 74 | add fp, sp, #4 75 | sub sp, sp, #8 76 | str r0, [fp, #-8] 77 | ldr r3, [fp, #-8] 78 | sub r3, r3, #1 79 | cmp r3, #16777216 80 | bcc .L8 81 | mov r3, #1 82 | b .L9 83 | .L8: 84 | ldr r2, .L10 85 | ldr r3, [fp, #-8] 86 | sub r3, r3, #1 87 | str r3, [r2, #4] 88 | mov r1, #7 89 | mvn r0, #0 90 | bl __NVIC_SetPriority 91 | ldr r3, .L10 92 | mov r2, #0 93 | str r2, [r3, #8] 94 | ldr r3, .L10 95 | mov r2, #7 96 | str r2, [r3] 97 | mov r3, #0 98 | .L9: 99 | mov r0, r3 100 | sub sp, fp, #4 101 | @ sp needed 102 | pop {fp, lr} 103 | bx lr 104 | .L11: 105 | .align 2 106 | .L10: 107 | .word -536813552 108 | .size SysTick_Config, .-SysTick_Config 109 | .bss 110 | .align 2 111 | tickCtr: 112 | .space 4 113 | .size tickCtr, 4 114 | .global l_tickCtr 115 | .data 116 | .align 2 117 | .type l_tickCtr, %object 118 | .size l_tickCtr, 4 119 | l_tickCtr: 120 | .word tickCtr 121 | .text 122 | .align 2 123 | .global os_on_startup 124 | .syntax unified 125 | .arm 126 | .fpu softvfp 127 | .type os_on_startup, %function 128 | os_on_startup: 129 | @ Function supports interworking. 130 | @ args = 0, pretend = 0, frame = 0 131 | @ frame_needed = 1, uses_anonymous_args = 0 132 | push {fp, lr} 133 | add fp, sp, #4 134 | bl SystemCoreClockUpdate 135 | ldr r3, .L13 136 | ldr r3, [r3] 137 | mov r0, r3 138 | bl SysTick_Config 139 | mov r1, #0 140 | mvn r0, #0 141 | bl __NVIC_SetPriority 142 | bl enable_irq 143 | nop 144 | sub sp, fp, #4 145 | @ sp needed 146 | pop {fp, lr} 147 | bx lr 148 | .L14: 149 | .align 2 150 | .L13: 151 | .word SystemCoreClock 152 | .size os_on_startup, .-os_on_startup 153 | .align 2 154 | .global disable_irq 155 | .syntax unified 156 | .arm 157 | .fpu softvfp 158 | .type disable_irq, %function 159 | disable_irq: 160 | @ Function supports interworking. 161 | @ args = 0, pretend = 0, frame = 0 162 | @ frame_needed = 1, uses_anonymous_args = 0 163 | @ link register save eliminated. 164 | str fp, [sp, #-4]! 165 | add fp, sp, #0 166 | .syntax divided 167 | @ 18 "/Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/bsp.c" 1 168 | CPSID I 169 | 170 | @ 0 "" 2 171 | .arm 172 | .syntax unified 173 | nop 174 | add sp, fp, #0 175 | @ sp needed 176 | ldr fp, [sp], #4 177 | bx lr 178 | .size disable_irq, .-disable_irq 179 | .align 2 180 | .global enable_irq 181 | .syntax unified 182 | .arm 183 | .fpu softvfp 184 | .type enable_irq, %function 185 | enable_irq: 186 | @ Function supports interworking. 187 | @ args = 0, pretend = 0, frame = 0 188 | @ frame_needed = 1, uses_anonymous_args = 0 189 | @ link register save eliminated. 190 | str fp, [sp, #-4]! 191 | add fp, sp, #0 192 | .syntax divided 193 | @ 24 "/Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/bsp.c" 1 194 | CPSIE I 195 | 196 | @ 0 "" 2 197 | .arm 198 | .syntax unified 199 | nop 200 | add sp, fp, #0 201 | @ sp needed 202 | ldr fp, [sp], #4 203 | bx lr 204 | .size enable_irq, .-enable_irq 205 | .global counter 206 | .bss 207 | .align 2 208 | .type counter, %object 209 | .size counter, 4 210 | counter: 211 | .space 4 212 | .text 213 | .align 2 214 | .global delay_block 215 | .syntax unified 216 | .arm 217 | .fpu softvfp 218 | .type delay_block, %function 219 | delay_block: 220 | @ Function supports interworking. 221 | @ args = 0, pretend = 0, frame = 8 222 | @ frame_needed = 1, uses_anonymous_args = 0 223 | @ link register save eliminated. 224 | str fp, [sp, #-4]! 225 | add fp, sp, #0 226 | sub sp, sp, #12 227 | str r0, [fp, #-8] 228 | ldr r3, .L19 229 | ldr r3, [r3] 230 | ldr r2, [fp, #-8] 231 | str r2, [r3] 232 | nop 233 | .L18: 234 | ldr r3, .L19 235 | ldr r3, [r3] 236 | ldr r3, [r3] 237 | cmp r3, #0 238 | bgt .L18 239 | nop 240 | add sp, fp, #0 241 | @ sp needed 242 | ldr fp, [sp], #4 243 | bx lr 244 | .L20: 245 | .align 2 246 | .L19: 247 | .word l_tickCtr 248 | .size delay_block, .-delay_block 249 | .align 2 250 | .global bsp_init 251 | .syntax unified 252 | .arm 253 | .fpu softvfp 254 | .type bsp_init, %function 255 | bsp_init: 256 | @ Function supports interworking. 257 | @ args = 0, pretend = 0, frame = 0 258 | @ frame_needed = 1, uses_anonymous_args = 0 259 | push {fp, lr} 260 | add fp, sp, #4 261 | ldr r3, .L22 262 | ldr r3, [r3, #1544] 263 | ldr r2, .L22 264 | orr r3, r3, #32 265 | str r3, [r2, #1544] 266 | ldr r3, .L22+4 267 | mov r2, #14 268 | str r2, [r3, #1024] 269 | ldr r3, .L22+4 270 | mov r2, #14 271 | str r2, [r3, #1308] 272 | ldr r3, .L22+4 273 | ldr r3, [r3, #1020] 274 | ldr r2, .L22+4 275 | bic r3, r3, #14 276 | str r3, [r2, #1020] 277 | bl uart_debug_init 278 | bl disable_irq 279 | nop 280 | sub sp, fp, #4 281 | @ sp needed 282 | pop {fp, lr} 283 | bx lr 284 | .L23: 285 | .align 2 286 | .L22: 287 | .word 1074782208 288 | .word 1073893376 289 | .size bsp_init, .-bsp_init 290 | .align 2 291 | .global light_red_on 292 | .syntax unified 293 | .arm 294 | .fpu softvfp 295 | .type light_red_on, %function 296 | light_red_on: 297 | @ Function supports interworking. 298 | @ args = 0, pretend = 0, frame = 0 299 | @ frame_needed = 1, uses_anonymous_args = 0 300 | @ link register save eliminated. 301 | str fp, [sp, #-4]! 302 | add fp, sp, #0 303 | ldr r3, .L25 304 | mov r2, #2 305 | str r2, [r3, #1020] 306 | nop 307 | add sp, fp, #0 308 | @ sp needed 309 | ldr fp, [sp], #4 310 | bx lr 311 | .L26: 312 | .align 2 313 | .L25: 314 | .word 1073893376 315 | .size light_red_on, .-light_red_on 316 | .align 2 317 | .global light_green_on 318 | .syntax unified 319 | .arm 320 | .fpu softvfp 321 | .type light_green_on, %function 322 | light_green_on: 323 | @ Function supports interworking. 324 | @ args = 0, pretend = 0, frame = 0 325 | @ frame_needed = 1, uses_anonymous_args = 0 326 | @ link register save eliminated. 327 | str fp, [sp, #-4]! 328 | add fp, sp, #0 329 | ldr r3, .L28 330 | mov r2, #8 331 | str r2, [r3, #1020] 332 | nop 333 | add sp, fp, #0 334 | @ sp needed 335 | ldr fp, [sp], #4 336 | bx lr 337 | .L29: 338 | .align 2 339 | .L28: 340 | .word 1073893376 341 | .size light_green_on, .-light_green_on 342 | .align 2 343 | .global light_blue_on 344 | .syntax unified 345 | .arm 346 | .fpu softvfp 347 | .type light_blue_on, %function 348 | light_blue_on: 349 | @ Function supports interworking. 350 | @ args = 0, pretend = 0, frame = 0 351 | @ frame_needed = 1, uses_anonymous_args = 0 352 | @ link register save eliminated. 353 | str fp, [sp, #-4]! 354 | add fp, sp, #0 355 | ldr r3, .L31 356 | mov r2, #4 357 | str r2, [r3, #1020] 358 | nop 359 | add sp, fp, #0 360 | @ sp needed 361 | ldr fp, [sp], #4 362 | bx lr 363 | .L32: 364 | .align 2 365 | .L31: 366 | .word 1073893376 367 | .size light_blue_on, .-light_blue_on 368 | .align 2 369 | .global light_red_off 370 | .syntax unified 371 | .arm 372 | .fpu softvfp 373 | .type light_red_off, %function 374 | light_red_off: 375 | @ Function supports interworking. 376 | @ args = 0, pretend = 0, frame = 0 377 | @ frame_needed = 1, uses_anonymous_args = 0 378 | @ link register save eliminated. 379 | str fp, [sp, #-4]! 380 | add fp, sp, #0 381 | ldr r3, .L34 382 | ldr r3, [r3, #1020] 383 | ldr r2, .L34 384 | bic r3, r3, #2 385 | str r3, [r2, #1020] 386 | nop 387 | add sp, fp, #0 388 | @ sp needed 389 | ldr fp, [sp], #4 390 | bx lr 391 | .L35: 392 | .align 2 393 | .L34: 394 | .word 1073893376 395 | .size light_red_off, .-light_red_off 396 | .align 2 397 | .global light_green_off 398 | .syntax unified 399 | .arm 400 | .fpu softvfp 401 | .type light_green_off, %function 402 | light_green_off: 403 | @ Function supports interworking. 404 | @ args = 0, pretend = 0, frame = 0 405 | @ frame_needed = 1, uses_anonymous_args = 0 406 | @ link register save eliminated. 407 | str fp, [sp, #-4]! 408 | add fp, sp, #0 409 | ldr r3, .L37 410 | ldr r3, [r3, #1020] 411 | ldr r2, .L37 412 | bic r3, r3, #8 413 | str r3, [r2, #1020] 414 | nop 415 | add sp, fp, #0 416 | @ sp needed 417 | ldr fp, [sp], #4 418 | bx lr 419 | .L38: 420 | .align 2 421 | .L37: 422 | .word 1073893376 423 | .size light_green_off, .-light_green_off 424 | .align 2 425 | .global light_blue_off 426 | .syntax unified 427 | .arm 428 | .fpu softvfp 429 | .type light_blue_off, %function 430 | light_blue_off: 431 | @ Function supports interworking. 432 | @ args = 0, pretend = 0, frame = 0 433 | @ frame_needed = 1, uses_anonymous_args = 0 434 | @ link register save eliminated. 435 | str fp, [sp, #-4]! 436 | add fp, sp, #0 437 | ldr r3, .L40 438 | ldr r3, [r3, #1020] 439 | ldr r2, .L40 440 | bic r3, r3, #4 441 | str r3, [r2, #1020] 442 | nop 443 | add sp, fp, #0 444 | @ sp needed 445 | ldr fp, [sp], #4 446 | bx lr 447 | .L41: 448 | .align 2 449 | .L40: 450 | .word 1073893376 451 | .size light_blue_off, .-light_blue_off 452 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 453 | -------------------------------------------------------------------------------- /user/asm/uart_debug.s: -------------------------------------------------------------------------------- 1 | .cpu arm7tdmi 2 | .eabi_attribute 20, 1 3 | .eabi_attribute 21, 1 4 | .eabi_attribute 23, 3 5 | .eabi_attribute 24, 1 6 | .eabi_attribute 25, 1 7 | .eabi_attribute 26, 1 8 | .eabi_attribute 30, 6 9 | .eabi_attribute 34, 0 10 | .eabi_attribute 18, 4 11 | .file "uart_debug.c" 12 | .text 13 | .align 2 14 | .global uart_debug_init 15 | .syntax unified 16 | .arm 17 | .fpu softvfp 18 | .type uart_debug_init, %function 19 | uart_debug_init: 20 | @ Function supports interworking. 21 | @ args = 0, pretend = 0, frame = 0 22 | @ frame_needed = 1, uses_anonymous_args = 0 23 | @ link register save eliminated. 24 | str fp, [sp, #-4]! 25 | add fp, sp, #0 26 | ldr r3, .L2 27 | ldr r3, [r3, #1560] 28 | ldr r2, .L2 29 | orr r3, r3, #1 30 | str r3, [r2, #1560] 31 | ldr r3, .L2 32 | ldr r3, [r3, #1544] 33 | ldr r2, .L2 34 | orr r3, r3, #1 35 | str r3, [r2, #1544] 36 | ldr r3, .L2+4 37 | mov r2, #3 38 | str r2, [r3, #1056] 39 | ldr r3, .L2+4 40 | mov r2, #17 41 | str r2, [r3, #1324] 42 | ldr r3, .L2+4 43 | mov r2, #3 44 | str r2, [r3, #1308] 45 | ldr r3, .L2+8 46 | ldr r3, [r3, #48] 47 | ldr r2, .L2+8 48 | bic r3, r3, #1 49 | str r3, [r2, #48] 50 | ldr r3, .L2+8 51 | mov r2, #104 52 | str r2, [r3, #36] 53 | ldr r3, .L2+8 54 | mov r2, #11 55 | str r2, [r3, #40] 56 | ldr r3, .L2+8 57 | mov r2, #96 58 | str r2, [r3, #44] 59 | ldr r3, .L2+8 60 | mov r2, #0 61 | str r2, [r3, #4040] 62 | ldr r3, .L2+8 63 | ldr r2, .L2+12 64 | str r2, [r3, #48] 65 | nop 66 | add sp, fp, #0 67 | @ sp needed 68 | ldr fp, [sp], #4 69 | bx lr 70 | .L3: 71 | .align 2 72 | .L2: 73 | .word 1074782208 74 | .word 1073758208 75 | .word 1073790976 76 | .word 769 77 | .size uart_debug_init, .-uart_debug_init 78 | .align 2 79 | .global uart_debug_print 80 | .syntax unified 81 | .arm 82 | .fpu softvfp 83 | .type uart_debug_print, %function 84 | uart_debug_print: 85 | @ Function supports interworking. 86 | @ args = 0, pretend = 0, frame = 8 87 | @ frame_needed = 1, uses_anonymous_args = 0 88 | push {fp, lr} 89 | add fp, sp, #4 90 | sub sp, sp, #8 91 | str r0, [fp, #-8] 92 | b .L5 93 | .L6: 94 | ldr r3, [fp, #-8] 95 | add r2, r3, #1 96 | str r2, [fp, #-8] 97 | ldrb r3, [r3] @ zero_extendqisi2 98 | mov r0, r3 99 | bl uart_debug_print_char 100 | .L5: 101 | ldr r3, [fp, #-8] 102 | ldrb r3, [r3] @ zero_extendqisi2 103 | cmp r3, #0 104 | bne .L6 105 | nop 106 | sub sp, fp, #4 107 | @ sp needed 108 | pop {fp, lr} 109 | bx lr 110 | .size uart_debug_print, .-uart_debug_print 111 | .align 2 112 | .global uart_debug_print_char 113 | .syntax unified 114 | .arm 115 | .fpu softvfp 116 | .type uart_debug_print_char, %function 117 | uart_debug_print_char: 118 | @ Function supports interworking. 119 | @ args = 0, pretend = 0, frame = 8 120 | @ frame_needed = 1, uses_anonymous_args = 0 121 | @ link register save eliminated. 122 | str fp, [sp, #-4]! 123 | add fp, sp, #0 124 | sub sp, sp, #12 125 | mov r3, r0 126 | strb r3, [fp, #-5] 127 | nop 128 | .L8: 129 | ldr r3, .L9 130 | ldr r3, [r3, #24] 131 | and r3, r3, #32 132 | cmp r3, #0 133 | bne .L8 134 | ldr r2, .L9 135 | ldrb r3, [fp, #-5] @ zero_extendqisi2 136 | str r3, [r2] 137 | nop 138 | add sp, fp, #0 139 | @ sp needed 140 | ldr fp, [sp], #4 141 | bx lr 142 | .L10: 143 | .align 2 144 | .L9: 145 | .word 1073790976 146 | .size uart_debug_print_char, .-uart_debug_print_char 147 | .align 2 148 | .global uart_debug_reveive_char 149 | .syntax unified 150 | .arm 151 | .fpu softvfp 152 | .type uart_debug_reveive_char, %function 153 | uart_debug_reveive_char: 154 | @ Function supports interworking. 155 | @ args = 0, pretend = 0, frame = 8 156 | @ frame_needed = 1, uses_anonymous_args = 0 157 | @ link register save eliminated. 158 | str fp, [sp, #-4]! 159 | add fp, sp, #0 160 | sub sp, sp, #12 161 | nop 162 | .L12: 163 | ldr r3, .L14 164 | ldr r3, [r3, #24] 165 | and r3, r3, #16 166 | cmp r3, #0 167 | bne .L12 168 | ldr r3, .L14 169 | ldr r3, [r3] 170 | strb r3, [fp, #-5] 171 | ldrb r3, [fp, #-5] @ zero_extendqisi2 172 | mov r0, r3 173 | add sp, fp, #0 174 | @ sp needed 175 | ldr fp, [sp], #4 176 | bx lr 177 | .L15: 178 | .align 2 179 | .L14: 180 | .word 1073790976 181 | .size uart_debug_reveive_char, .-uart_debug_reveive_char 182 | .align 2 183 | .global uart_debug_print_number 184 | .syntax unified 185 | .arm 186 | .fpu softvfp 187 | .type uart_debug_print_number, %function 188 | uart_debug_print_number: 189 | @ Function supports interworking. 190 | @ args = 0, pretend = 0, frame = 8 191 | @ frame_needed = 1, uses_anonymous_args = 0 192 | push {fp, lr} 193 | add fp, sp, #4 194 | sub sp, sp, #8 195 | str r0, [fp, #-8] 196 | str r1, [fp, #-12] 197 | ldr r3, [fp, #-8] 198 | cmp r3, #0 199 | bne .L17 200 | ldr r3, [fp, #-12] 201 | cmp r3, #1 202 | bne .L17 203 | mov r0, #48 204 | bl uart_debug_print_char 205 | .L17: 206 | ldr r3, [fp, #-8] 207 | cmp r3, #1 208 | bne .L18 209 | mov r0, #49 210 | bl uart_debug_print_char 211 | .L18: 212 | ldr r3, [fp, #-8] 213 | cmp r3, #2 214 | bne .L19 215 | mov r0, #50 216 | bl uart_debug_print_char 217 | .L19: 218 | ldr r3, [fp, #-8] 219 | cmp r3, #3 220 | bne .L20 221 | mov r0, #51 222 | bl uart_debug_print_char 223 | .L20: 224 | ldr r3, [fp, #-8] 225 | cmp r3, #4 226 | bne .L21 227 | mov r0, #52 228 | bl uart_debug_print_char 229 | .L21: 230 | ldr r3, [fp, #-8] 231 | cmp r3, #5 232 | bne .L22 233 | mov r0, #53 234 | bl uart_debug_print_char 235 | .L22: 236 | ldr r3, [fp, #-8] 237 | cmp r3, #6 238 | bne .L23 239 | mov r0, #54 240 | bl uart_debug_print_char 241 | .L23: 242 | ldr r3, [fp, #-8] 243 | cmp r3, #7 244 | bne .L24 245 | mov r0, #55 246 | bl uart_debug_print_char 247 | .L24: 248 | ldr r3, [fp, #-8] 249 | cmp r3, #8 250 | bne .L25 251 | mov r0, #56 252 | bl uart_debug_print_char 253 | .L25: 254 | ldr r3, [fp, #-8] 255 | cmp r3, #9 256 | bne .L26 257 | mov r0, #57 258 | bl uart_debug_print_char 259 | .L26: 260 | ldr r3, [fp, #-8] 261 | cmp r3, #10 262 | bne .L27 263 | mov r0, #97 264 | bl uart_debug_print_char 265 | .L27: 266 | ldr r3, [fp, #-8] 267 | cmp r3, #11 268 | bne .L28 269 | mov r0, #98 270 | bl uart_debug_print_char 271 | .L28: 272 | ldr r3, [fp, #-8] 273 | cmp r3, #12 274 | bne .L29 275 | mov r0, #99 276 | bl uart_debug_print_char 277 | .L29: 278 | ldr r3, [fp, #-8] 279 | cmp r3, #13 280 | bne .L30 281 | mov r0, #100 282 | bl uart_debug_print_char 283 | .L30: 284 | ldr r3, [fp, #-8] 285 | cmp r3, #15 286 | bne .L31 287 | mov r0, #101 288 | bl uart_debug_print_char 289 | .L31: 290 | ldr r3, [fp, #-8] 291 | cmp r3, #15 292 | bne .L33 293 | mov r0, #102 294 | bl uart_debug_print_char 295 | .L33: 296 | nop 297 | sub sp, fp, #4 298 | @ sp needed 299 | pop {fp, lr} 300 | bx lr 301 | .size uart_debug_print_number, .-uart_debug_print_number 302 | .global __aeabi_uidiv 303 | .align 2 304 | .global uart_debug_print_i32 305 | .syntax unified 306 | .arm 307 | .fpu softvfp 308 | .type uart_debug_print_i32, %function 309 | uart_debug_print_i32: 310 | @ Function supports interworking. 311 | @ args = 0, pretend = 0, frame = 32 312 | @ frame_needed = 1, uses_anonymous_args = 0 313 | push {r4, fp, lr} 314 | add fp, sp, #8 315 | sub sp, sp, #36 316 | str r0, [fp, #-40] 317 | str r1, [fp, #-44] 318 | ldr r3, [fp, #-44] 319 | cmp r3, #16 320 | bne .L35 321 | mov r0, #48 322 | bl uart_debug_print_char 323 | mov r0, #120 324 | bl uart_debug_print_char 325 | mov r3, #0 326 | str r3, [fp, #-16] 327 | b .L36 328 | .L37: 329 | ldr r3, [fp, #-16] 330 | rsb r3, r3, #7 331 | lsl r3, r3, #2 332 | ldr r2, [fp, #-40] 333 | lsr r3, r2, r3 334 | and r3, r3, #15 335 | str r3, [fp, #-28] 336 | mov r1, #1 337 | ldr r0, [fp, #-28] 338 | bl uart_debug_print_number 339 | ldr r3, [fp, #-16] 340 | add r3, r3, #1 341 | str r3, [fp, #-16] 342 | .L36: 343 | ldr r3, [fp, #-16] 344 | cmp r3, #7 345 | ble .L37 346 | b .L45 347 | .L35: 348 | ldr r3, [fp, #-44] 349 | cmp r3, #10 350 | bne .L45 351 | ldr r3, .L46 352 | str r3, [fp, #-32] 353 | mov r3, #0 354 | str r3, [fp, #-20] 355 | b .L39 356 | .L44: 357 | ldr r3, [fp, #-32] 358 | mov r1, r3 359 | ldr r0, [fp, #-40] 360 | bl __aeabi_uidiv 361 | mov r3, r0 362 | str r3, [fp, #-24] 363 | ldr r3, [fp, #-24] 364 | cmp r3, #0 365 | beq .L40 366 | mov r3, #1 367 | str r3, [fp, #-20] 368 | .L40: 369 | ldr r3, [fp, #-20] 370 | cmp r3, #0 371 | bne .L41 372 | mov r1, #0 373 | ldr r0, [fp, #-24] 374 | bl uart_debug_print_number 375 | b .L42 376 | .L41: 377 | mov r1, #1 378 | ldr r0, [fp, #-24] 379 | bl uart_debug_print_number 380 | .L42: 381 | ldr r3, [fp, #-32] 382 | ldr r2, [fp, #-40] 383 | cmp r2, r3 384 | bcc .L43 385 | ldr r1, [fp, #-32] 386 | ldr r2, [fp, #-24] 387 | mul r3, r2, r1 388 | ldr r2, [fp, #-40] 389 | sub r3, r2, r3 390 | str r3, [fp, #-40] 391 | .L43: 392 | ldr r2, [fp, #-32] 393 | ldr r1, .L46+4 394 | umull r3, r4, r2, r1 395 | lsr r3, r4, #3 396 | str r3, [fp, #-32] 397 | .L39: 398 | ldr r3, [fp, #-32] 399 | cmp r3, #1 400 | bne .L44 401 | mov r1, #1 402 | ldr r0, [fp, #-40] 403 | bl uart_debug_print_number 404 | .L45: 405 | nop 406 | sub sp, fp, #8 407 | @ sp needed 408 | pop {r4, fp, lr} 409 | bx lr 410 | .L47: 411 | .align 2 412 | .L46: 413 | .word 1000000000 414 | .word -858993459 415 | .size uart_debug_print_i32, .-uart_debug_print_i32 416 | .align 2 417 | .global uart_debug_print_os_register 418 | .syntax unified 419 | .arm 420 | .fpu softvfp 421 | .type uart_debug_print_os_register, %function 422 | uart_debug_print_os_register: 423 | @ Function supports interworking. 424 | @ args = 0, pretend = 0, frame = 0 425 | @ frame_needed = 1, uses_anonymous_args = 0 426 | @ link register save eliminated. 427 | str fp, [sp, #-4]! 428 | add fp, sp, #0 429 | .syntax divided 430 | @ 173 "/Users/neroyang/project/Ceno-RTOS/board/arch/arm32/ek-TM4C123gxl/TM4C123GH6PM/ceno_os/src/uart_debug.c" 1 431 | MOV r0, r15 432 | BL uart_debug_print_i32 433 | MOV r0, #10 434 | BL uart_debug_print_char 435 | MOV r0, pc 436 | BL uart_debug_print_i32 437 | MOV r0, lr 438 | BL uart_debug_print_i32 439 | MOV r0, r12 440 | BL uart_debug_print_i32 441 | MOV r0, r3 442 | BL uart_debug_print_i32 443 | MOV r0, r2 444 | BL uart_debug_print_i32 445 | MOV r0, r0 446 | BL uart_debug_print_i32 447 | MOV r0, r11 448 | BL uart_debug_print_i32 449 | MOV r0, r10 450 | BL uart_debug_print_i32 451 | MOV r0, r9 452 | BL uart_debug_print_i32 453 | MOV r0, r8 454 | BL uart_debug_print_i32 455 | MOV r0, r7 456 | BL uart_debug_print_i32 457 | MOV r0, r6 458 | BL uart_debug_print_i32 459 | MOV r0, r5 460 | BL uart_debug_print_i32 461 | MOV r0, r4 462 | BL uart_debug_print_i32 463 | 464 | @ 0 "" 2 465 | .arm 466 | .syntax unified 467 | nop 468 | add sp, fp, #0 469 | @ sp needed 470 | ldr fp, [sp], #4 471 | bx lr 472 | .size uart_debug_print_os_register, .-uart_debug_print_os_register 473 | .ident "GCC: (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]" 474 | --------------------------------------------------------------------------------