Improved sandbox demo.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13245 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
af4c60a3ef
commit
6003782d71
|
@ -37,7 +37,7 @@
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="RT-STM32L476-DISCOVERY-SB_CLIENT.null.1004513353" name="RT-STM32L476-DISCOVERY-SB_CLIENT"/>
|
<project id="RT-STM32L476-DISCOVERY-SB_CLIENT1.null.1004513353" name="RT-STM32L476-DISCOVERY-SB_CLIENT1"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
<storageModule moduleId="refreshScope" versionNumber="2">
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
<configuration configurationName="Default">
|
<configuration configurationName="Default">
|
||||||
<resource resourceType="PROJECT" workspacePath="/RT-STM32L476-DISCOVERY-SB_CLIENT"/>
|
<resource resourceType="PROJECT" workspacePath="/RT-STM32L476-DISCOVERY-SB_CLIENT1"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<projectDescription>
|
<projectDescription>
|
||||||
<name>RT-STM32L476-DISCOVERY-SB_CLIENT</name>
|
<name>RT-STM32L476-DISCOVERY-SB_CLIENT1</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
|
@ -42,8 +42,8 @@ int main(void) {
|
||||||
#endif
|
#endif
|
||||||
while (true) {
|
while (true) {
|
||||||
msg_t msg = sbMsgWait();
|
msg_t msg = sbMsgWait();
|
||||||
printf("Hello World (%u)!!\r\n", (unsigned)msg);
|
printf("#1 Hello World (%u)!!\r\n", (unsigned)msg);
|
||||||
// sbFileWrite(1U, (const uint8_t *)"Hello World!!\r\n", 15U);
|
// sbFileWrite(1U, (const uint8_t *)"#1 Hello World!!\r\n", 15U);
|
||||||
sbMsgReply(msg);
|
sbMsgReply(msg);
|
||||||
// sbSleepMilliseconds(500);
|
// sbSleepMilliseconds(500);
|
||||||
}
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sandbox memory setup.
|
||||||
|
*/
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
flash0 (rx) : org = 0x080F0000, len = 32k
|
||||||
|
ram0 (wx) : org = 0x20016000, len = 4k
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flash region to be used for exception vectors.*/
|
||||||
|
REGION_ALIAS("CODE_SPACE", flash0);
|
||||||
|
|
||||||
|
/* RAM region to be used for data.*/
|
||||||
|
REGION_ALIAS("DATA_SPACE", ram0);
|
||||||
|
|
||||||
|
/* Generic rules inclusion.*/
|
||||||
|
INCLUDE rules.ld
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
<cconfiguration id="0.603687198">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.603687198" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.603687198" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||||
|
<folderInfo id="0.603687198." name="/" resourcePath="">
|
||||||
|
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.586709963" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||||
|
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.586709963.1446538340" name=""/>
|
||||||
|
<builder autoBuildTarget="all" cleanBuildTarget="clean" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.1490952991" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1134067298" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.1927705259" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1013764026" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.1367371861" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1824820452" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.1584496456" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1781547795" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<project id="RT-STM32L476-DISCOVERY-SB_CLIENT2.null.1004513353" name="RT-STM32L476-DISCOVERY-SB_CLIENT2"/>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<scannerConfigBuildInfo instanceId="0.603687198">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
|
<configuration configurationName="Default">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/RT-STM32L476-DISCOVERY-SB_CLIENT2"/>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
</cproject>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>RT-STM32L476-DISCOVERY-SB_CLIENT2</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
</natures>
|
||||||
|
<linkedResources>
|
||||||
|
<link>
|
||||||
|
<name>sb</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>CHIBIOS/os/sb</locationURI>
|
||||||
|
</link>
|
||||||
|
</linkedResources>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,191 @@
|
||||||
|
##############################################################################
|
||||||
|
# Build global options
|
||||||
|
# NOTE: Can be overridden externally.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Compiler options here.
|
||||||
|
ifeq ($(USE_OPT),)
|
||||||
|
USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||||
|
endif
|
||||||
|
|
||||||
|
# C specific options here (added to USE_OPT).
|
||||||
|
ifeq ($(USE_COPT),)
|
||||||
|
USE_COPT =
|
||||||
|
endif
|
||||||
|
|
||||||
|
# C++ specific options here (added to USE_OPT).
|
||||||
|
ifeq ($(USE_CPPOPT),)
|
||||||
|
USE_CPPOPT = -fno-rtti
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want the linker to remove unused code and data.
|
||||||
|
ifeq ($(USE_LINK_GC),)
|
||||||
|
USE_LINK_GC = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Linker extra options here.
|
||||||
|
ifeq ($(USE_LDOPT),)
|
||||||
|
USE_LDOPT =
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want link time optimizations (LTO).
|
||||||
|
ifeq ($(USE_LTO),)
|
||||||
|
USE_LTO = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want to see the full log while compiling.
|
||||||
|
ifeq ($(USE_VERBOSE_COMPILE),)
|
||||||
|
USE_VERBOSE_COMPILE = no
|
||||||
|
endif
|
||||||
|
|
||||||
|
# If enabled, this option makes the build process faster by not compiling
|
||||||
|
# modules not used in the current configuration.
|
||||||
|
ifeq ($(USE_SMART_BUILD),)
|
||||||
|
USE_SMART_BUILD = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# Build global options
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Architecture or project specific options
|
||||||
|
#
|
||||||
|
|
||||||
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
|
# the stack used by the main() thread.
|
||||||
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
|
USE_PROCESS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
|
# stack is used for processing interrupts and exceptions.
|
||||||
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
|
USE_EXCEPTIONS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Enables the use of FPU (no, softfp, hard).
|
||||||
|
ifeq ($(USE_FPU),)
|
||||||
|
USE_FPU = no
|
||||||
|
endif
|
||||||
|
|
||||||
|
# FPU-related options.
|
||||||
|
ifeq ($(USE_FPU_OPT),)
|
||||||
|
USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16
|
||||||
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# Architecture or project specific options
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Project, target, sources and paths
|
||||||
|
#
|
||||||
|
|
||||||
|
# Define project name here
|
||||||
|
PROJECT = ch
|
||||||
|
|
||||||
|
# Target settings.
|
||||||
|
MCU = cortex-m4
|
||||||
|
|
||||||
|
# Imported source files and paths.
|
||||||
|
CHIBIOS := ../../..
|
||||||
|
CONFDIR := ./cfg
|
||||||
|
BUILDDIR := ./build
|
||||||
|
DEPDIR := ./.dep
|
||||||
|
|
||||||
|
# Licensing files.
|
||||||
|
include $(CHIBIOS)/os/license/license.mk
|
||||||
|
# Startup files.
|
||||||
|
include $(CHIBIOS)/os/common/startup/ARMCMx-SB/compilers/GCC/mk/startup.mk
|
||||||
|
# HAL-OSAL files (optional).
|
||||||
|
#include $(CHIBIOS)/os/hal/hal.mk
|
||||||
|
#include $(CHIBIOS)/os/hal/ports/STM32/STM32L4xx/platform.mk
|
||||||
|
#include $(CHIBIOS)/os/hal/boards/ST_STM32L476_DISCOVERY/board.mk
|
||||||
|
#include $(CHIBIOS)/os/hal/osal/rt-nil/osal.mk
|
||||||
|
# RTOS files (optional).
|
||||||
|
#include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
#include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
|
||||||
|
include $(CHIBIOS)/os/sb/user/sbuser.mk
|
||||||
|
# Auto-build files in ./source recursively.
|
||||||
|
include $(CHIBIOS)/tools/mk/autobuild.mk
|
||||||
|
# Other files (optional).
|
||||||
|
#include $(CHIBIOS)/test/lib/test.mk
|
||||||
|
#include $(CHIBIOS)/test/rt/rt_test.mk
|
||||||
|
#include $(CHIBIOS)/test/oslib/oslib_test.mk
|
||||||
|
|
||||||
|
# Define linker script file here.
|
||||||
|
LDSCRIPT= ./sandbox.ld
|
||||||
|
|
||||||
|
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
|
# setting.
|
||||||
|
CSRC = $(ALLCSRC) \
|
||||||
|
$(TESTSRC) \
|
||||||
|
$(CHIBIOS)/os/sb/various/syscalls.c \
|
||||||
|
main.c
|
||||||
|
|
||||||
|
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
|
# setting.
|
||||||
|
CPPSRC = $(ALLCPPSRC)
|
||||||
|
|
||||||
|
# List ASM source files here.
|
||||||
|
ASMSRC = $(ALLASMSRC)
|
||||||
|
|
||||||
|
# List ASM with preprocessor source files here.
|
||||||
|
ASMXSRC = $(ALLXASMSRC)
|
||||||
|
|
||||||
|
# Inclusion directories.
|
||||||
|
INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC)
|
||||||
|
|
||||||
|
# Define C warning options here.
|
||||||
|
CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes
|
||||||
|
|
||||||
|
# Define C++ warning options here.
|
||||||
|
CPPWARN = -Wall -Wextra -Wundef
|
||||||
|
|
||||||
|
#
|
||||||
|
# Project, target, sources and paths
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Start of user section
|
||||||
|
#
|
||||||
|
|
||||||
|
# List all user C define here, like -D_DEBUG=1
|
||||||
|
UDEFS =
|
||||||
|
|
||||||
|
# Define ASM defines here
|
||||||
|
UADEFS =
|
||||||
|
|
||||||
|
# List all user directories here
|
||||||
|
UINCDIR =
|
||||||
|
|
||||||
|
# List the user directory to look for the libraries here
|
||||||
|
ULIBDIR =
|
||||||
|
|
||||||
|
# List all user libraries here
|
||||||
|
ULIBS =
|
||||||
|
|
||||||
|
#
|
||||||
|
# End of user section
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Common rules
|
||||||
|
#
|
||||||
|
|
||||||
|
RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk
|
||||||
|
include $(RULESPATH)/arm-none-eabi.mk
|
||||||
|
include $(RULESPATH)/rules.mk
|
||||||
|
|
||||||
|
#
|
||||||
|
# Common rules
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Custom rules
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Custom rules
|
||||||
|
##############################################################################
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "sbuser.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Application entry point.
|
||||||
|
*/
|
||||||
|
int main(void) {
|
||||||
|
|
||||||
|
/* API layer initialization.*/
|
||||||
|
sbApiInit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Normal main() activity, in this demo it does nothing except
|
||||||
|
* sleeping in a loop.
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
/* Test for exception on interrupt.*/
|
||||||
|
asm volatile ("mov r0, #64");
|
||||||
|
asm volatile ("mov sp, r0");
|
||||||
|
while (true) {
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
while (true) {
|
||||||
|
msg_t msg = sbMsgWait();
|
||||||
|
printf("#2 Hello World (%u)!!\r\n", (unsigned)msg);
|
||||||
|
// sbFileWrite(1U, (const uint8_t *)"#2 Hello World!!\r\n", 15U);
|
||||||
|
sbMsgReply(msg);
|
||||||
|
// sbSleepMilliseconds(500);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,22 +19,22 @@
|
||||||
*/
|
*/
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash0 (rx) : org = 0x08000000, len = 1M - 32k
|
flash0 (rx) : org = 0x08000000, len = 1M - 64k
|
||||||
flash1 (rx) : org = 0x00000000, len = 0
|
flash1 (rx) : org = 0x00000000, len = 0
|
||||||
flash2 (rx) : org = 0x00000000, len = 0
|
flash2 (rx) : org = 0x00000000, len = 0
|
||||||
flash3 (rx) : org = 0x00000000, len = 0
|
flash3 (rx) : org = 0x00000000, len = 0
|
||||||
flash4 (rx) : org = 0x00000000, len = 0
|
flash4 (rx) : org = 0x00000000, len = 0
|
||||||
flash5 (rx) : org = 0x00000000, len = 0
|
flash5 (rx) : org = 0x00000000, len = 0
|
||||||
flash6 (rx) : org = 0x00000000, len = 0
|
flash6 (rx) : org = 0x08000000 + 1M - 64k, len = 32k /* Flash for SB1.*/
|
||||||
flash7 (rx) : org = 0x08000000 + 1M - 32k, len = 32k
|
flash7 (rx) : org = 0x08000000 + 1M - 32k, len = 32k /* Flash for SB2.*/
|
||||||
ram0 (wx) : org = 0x20000000, len = 96k - 4k
|
ram0 (wx) : org = 0x20000000, len = 96k - 4k
|
||||||
ram1 (wx) : org = 0x00000000, len = 0
|
ram1 (wx) : org = 0x00000000, len = 0
|
||||||
ram2 (wx) : org = 0x00000000, len = 0
|
ram2 (wx) : org = 0x00000000, len = 0
|
||||||
ram3 (wx) : org = 0x00000000, len = 0
|
ram3 (wx) : org = 0x00000000, len = 0
|
||||||
ram4 (wx) : org = 0x10000000, len = 32k
|
ram4 (wx) : org = 0x10000000, len = 32k
|
||||||
ram5 (wx) : org = 0x00000000, len = 0
|
ram5 (wx) : org = 0x00000000, len = 0
|
||||||
ram6 (wx) : org = 0x00000000, len = 0
|
ram6 (wx) : org = 0x20000000 + 96k - 8k, len = 4k /* RAM for SB1.*/
|
||||||
ram7 (wx) : org = 0x20000000 + 96k - 4k, len = 4k
|
ram7 (wx) : org = 0x20000000 + 96k - 4k, len = 4k /* RAM for SB2.*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
/* For each data/text section two region are defined, a virtual region
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="true"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value="set remotetimeout 20 monitor reset init monitor sleep 50 load C:/_projects/chibios-trunk/demos/STM32/RT-STM32L476-DISCOVERY-SB_CLIENT/build/ch.elf "/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value="set remotetimeout 20 monitor reset init monitor sleep 50 monitor erase_address pad 0x080F0000 0x00100000 load /home/giovanni/Projects/ChibiStudio/chibios_trunk/demos/STM32/RT-STM32L476-DISCOVERY-SB_CLIENT1/build/ch.elf load /home/giovanni/Projects/ChibiStudio/chibios_trunk/demos/STM32/RT-STM32L476-DISCOVERY-SB_CLIENT2/build/ch.elf "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="Generic TCP/IP"/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="Generic TCP/IP"/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
@ -33,9 +33,9 @@
|
||||||
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
|
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
|
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="psp-SVC_Handler-(format)" val="4"/><content id="s_psp-SVC_Handler-(format)" val="4"/><content id="s_psp-port_unprivileged_jump-(format)" val="4"/><content id="r0-(format)" val="4"/><content id="r1-(format)" val="4"/><content id="r2-(format)" val="4"/><content id="xPSR-(format)" val="4"/></contentList>"/>
|
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="hdr_magic2-sbhp-sbStart-(format)" val="4"/><content id="hdr_magic1-sbhp-sbStart-(format)" val="4"/><content id="s_psp-SVC_Handler-(format)" val="4"/><content id="r0-(format)" val="4"/><content id="r1-(format)" val="4"/><content id="r2-(format)" val="4"/><content id="xPSR-(format)" val="4"/><content id="s_psp-port_unprivileged_jump-(format)" val="4"/><content id="psp-SVC_Handler-(format)" val="4"/></contentList>"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
|
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList> <memoryBlockExpressionItem> <expression text="0x20000300"/> </memoryBlockExpressionItem> </memoryBlockExpressionList> "/>
|
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList> <memoryBlockExpressionItem> <expression text="0x80f8000"/> </memoryBlockExpressionItem> </memoryBlockExpressionList> "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="RT-STM32L476-DISCOVERY-SB_HOST"/>
|
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="RT-STM32L476-DISCOVERY-SB_HOST"/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||||
|
|
|
@ -22,8 +22,39 @@
|
||||||
#include "chprintf.h"
|
#include "chprintf.h"
|
||||||
#include "sb.h"
|
#include "sb.h"
|
||||||
|
|
||||||
/* SandBox object.*/
|
/* Static memory areas used by sandboxes.*/
|
||||||
sb_class_t sbx1;
|
extern uint32_t __flash6_base__, __flash6_end__,
|
||||||
|
__flash7_base__, __flash7_end__,
|
||||||
|
__ram6_base__, __ram6_end__,
|
||||||
|
__ram7_base__, __ram7_end__;
|
||||||
|
|
||||||
|
/* Sandbox objects.*/
|
||||||
|
sb_class_t sbx1, sbx2;
|
||||||
|
|
||||||
|
/* Sandbox configurations.*/
|
||||||
|
static const sb_config_t sb_config1 = {
|
||||||
|
.code_region = 0U,
|
||||||
|
.data_region = 1U,
|
||||||
|
.regions = {
|
||||||
|
{(uint32_t)&__flash6_base__, (uint32_t)&__flash6_end__, false},
|
||||||
|
{(uint32_t)&__ram6_base__, (uint32_t)&__ram6_end__, true}
|
||||||
|
},
|
||||||
|
.stdin_stream = (SandboxStream *)&SD2,
|
||||||
|
.stdout_stream = (SandboxStream *)&SD2,
|
||||||
|
.stderr_stream = (SandboxStream *)&SD2
|
||||||
|
};
|
||||||
|
|
||||||
|
static const sb_config_t sb_config2 = {
|
||||||
|
.code_region = 0U,
|
||||||
|
.data_region = 1U,
|
||||||
|
.regions = {
|
||||||
|
{(uint32_t)&__flash7_base__, (uint32_t)&__flash7_end__, false},
|
||||||
|
{(uint32_t)&__ram7_base__, (uint32_t)&__ram7_end__, true}
|
||||||
|
},
|
||||||
|
.stdin_stream = (SandboxStream *)&SD2,
|
||||||
|
.stdout_stream = (SandboxStream *)&SD2,
|
||||||
|
.stderr_stream = (SandboxStream *)&SD2
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LEDs blinker thread, times are in milliseconds.
|
* LEDs blinker thread, times are in milliseconds.
|
||||||
|
@ -39,36 +70,24 @@ static THD_FUNCTION(Thread1, arg) {
|
||||||
chThdSleepMilliseconds(50);
|
chThdSleepMilliseconds(50);
|
||||||
palClearLine(LINE_LED_RED);
|
palClearLine(LINE_LED_RED);
|
||||||
chThdSleepMilliseconds(200);
|
chThdSleepMilliseconds(200);
|
||||||
|
(void) sbSendMessage(&sbx1, (msg_t)i);
|
||||||
palSetLine(LINE_LED_GREEN);
|
palSetLine(LINE_LED_GREEN);
|
||||||
chThdSleepMilliseconds(50);
|
chThdSleepMilliseconds(50);
|
||||||
palSetLine(LINE_LED_RED);
|
palSetLine(LINE_LED_RED);
|
||||||
chThdSleepMilliseconds(200);
|
chThdSleepMilliseconds(200);
|
||||||
(void) sbSendMessage(&sbx1, (msg_t)i);
|
(void) sbSendMessage(&sbx2, (msg_t)i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unprivileged thread.
|
* Unprivileged thread1.
|
||||||
*/
|
*/
|
||||||
static THD_WORKING_AREA(waUnprivileged1, 128);
|
static THD_WORKING_AREA(waUnprivileged1, 128);
|
||||||
static THD_FUNCTION(Unprivileged1, arg) {
|
static THD_FUNCTION(Unprivileged1, arg) {
|
||||||
extern uint32_t __flash7_base__, __flash7_end__,
|
|
||||||
__ram7_base__, __ram7_end__;
|
|
||||||
static const sb_config_t sb_config = {
|
|
||||||
.code_region = 0U,
|
|
||||||
.data_region = 1U,
|
|
||||||
.regions = {
|
|
||||||
{(uint32_t)&__flash7_base__, (uint32_t)&__flash7_end__, false},
|
|
||||||
{(uint32_t)&__ram7_base__, (uint32_t)&__ram7_end__, true}
|
|
||||||
},
|
|
||||||
.stdin_stream = (SandboxStream *)&SD2,
|
|
||||||
.stdout_stream = (SandboxStream *)&SD2,
|
|
||||||
.stderr_stream = (SandboxStream *)&SD2
|
|
||||||
};
|
|
||||||
|
|
||||||
(void)arg;
|
(void)arg;
|
||||||
chRegSetThreadName("unprivileged");
|
chRegSetThreadName("unprivileged1");
|
||||||
|
|
||||||
/* Sandbox object initialization.*/
|
/* Sandbox object initialization.*/
|
||||||
sbObjectInit(&sbx1);
|
sbObjectInit(&sbx1);
|
||||||
|
@ -76,13 +95,13 @@ static THD_FUNCTION(Unprivileged1, arg) {
|
||||||
/* Static MPU setup for the sandbox, both regions are used because in this
|
/* Static MPU setup for the sandbox, both regions are used because in this
|
||||||
demo it requires both a flash and a RAM regions.*/
|
demo it requires both a flash and a RAM regions.*/
|
||||||
mpuConfigureRegion(MPU_REGION_0,
|
mpuConfigureRegion(MPU_REGION_0,
|
||||||
sb_config.regions[0].base,
|
sb_config1.regions[0].base,
|
||||||
MPU_RASR_ATTR_AP_RO_RO |
|
MPU_RASR_ATTR_AP_RO_RO |
|
||||||
MPU_RASR_ATTR_CACHEABLE_WT_NWA |
|
MPU_RASR_ATTR_CACHEABLE_WT_NWA |
|
||||||
MPU_RASR_SIZE_32K |
|
MPU_RASR_SIZE_32K |
|
||||||
MPU_RASR_ENABLE);
|
MPU_RASR_ENABLE);
|
||||||
mpuConfigureRegion(MPU_REGION_1,
|
mpuConfigureRegion(MPU_REGION_1,
|
||||||
sb_config.regions[1].base,
|
sb_config1.regions[1].base,
|
||||||
MPU_RASR_ATTR_AP_RW_RW |
|
MPU_RASR_ATTR_AP_RW_RW |
|
||||||
MPU_RASR_ATTR_CACHEABLE_WB_WA |
|
MPU_RASR_ATTR_CACHEABLE_WB_WA |
|
||||||
MPU_RASR_SIZE_4K |
|
MPU_RASR_SIZE_4K |
|
||||||
|
@ -90,7 +109,42 @@ static THD_FUNCTION(Unprivileged1, arg) {
|
||||||
|
|
||||||
/* This thread goes in the sandbox and is trapped there, it cannot
|
/* This thread goes in the sandbox and is trapped there, it cannot
|
||||||
return, only invoke the sandbox API.*/
|
return, only invoke the sandbox API.*/
|
||||||
sbStart(&sbx1, &sb_config);
|
sbStart(&sbx1, &sb_config1);
|
||||||
|
|
||||||
|
/* Function sbStart() only fails if the sandbox cannot be started
|
||||||
|
because code header problems.*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unprivileged thread2.
|
||||||
|
*/
|
||||||
|
static THD_WORKING_AREA(waUnprivileged2, 128);
|
||||||
|
static THD_FUNCTION(Unprivileged2, arg) {
|
||||||
|
|
||||||
|
(void)arg;
|
||||||
|
chRegSetThreadName("unprivileged2");
|
||||||
|
|
||||||
|
/* Sandbox object initialization.*/
|
||||||
|
sbObjectInit(&sbx2);
|
||||||
|
|
||||||
|
/* Static MPU setup for the sandbox, both regions are used because in this
|
||||||
|
demo it requires both a flash and a RAM regions.*/
|
||||||
|
mpuConfigureRegion(MPU_REGION_2,
|
||||||
|
sb_config2.regions[0].base,
|
||||||
|
MPU_RASR_ATTR_AP_RO_RO |
|
||||||
|
MPU_RASR_ATTR_CACHEABLE_WT_NWA |
|
||||||
|
MPU_RASR_SIZE_32K |
|
||||||
|
MPU_RASR_ENABLE);
|
||||||
|
mpuConfigureRegion(MPU_REGION_3,
|
||||||
|
sb_config2.regions[1].base,
|
||||||
|
MPU_RASR_ATTR_AP_RW_RW |
|
||||||
|
MPU_RASR_ATTR_CACHEABLE_WB_WA |
|
||||||
|
MPU_RASR_SIZE_4K |
|
||||||
|
MPU_RASR_ENABLE);
|
||||||
|
|
||||||
|
/* This thread goes in the sandbox and is trapped there, it cannot
|
||||||
|
return, only invoke the sandbox API.*/
|
||||||
|
sbStart(&sbx2, &sb_config2);
|
||||||
|
|
||||||
/* Function sbStart() only fails if the sandbox cannot be started
|
/* Function sbStart() only fails if the sandbox cannot be started
|
||||||
because code header problems.*/
|
because code header problems.*/
|
||||||
|
@ -100,8 +154,8 @@ static THD_FUNCTION(Unprivileged1, arg) {
|
||||||
* Application entry point.
|
* Application entry point.
|
||||||
*/
|
*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
thread_t *tp;
|
thread_t *tp1, *tp2;
|
||||||
msg_t msg;
|
// msg_t msg;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System initializations.
|
* System initializations.
|
||||||
|
@ -120,14 +174,19 @@ int main(void) {
|
||||||
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO+10,
|
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO+10,
|
||||||
Thread1, NULL);
|
Thread1, NULL);
|
||||||
|
|
||||||
/* Creating the unprivileged thread.*/
|
/* Creating the unprivileged threads.*/
|
||||||
chprintf((BaseSequentialStream *)&SD2, "Starting unprivileged thread\r\n");
|
chprintf((BaseSequentialStream *)&SD2, "Starting unprivileged thread 1\r\n");
|
||||||
tp = chThdCreateStatic(waUnprivileged1, sizeof(waUnprivileged1),
|
tp1 = chThdCreateStatic(waUnprivileged1, sizeof(waUnprivileged1),
|
||||||
NORMALPRIO - 10U, Unprivileged1, NULL);
|
NORMALPRIO - 10U, Unprivileged1, NULL);
|
||||||
|
chprintf((BaseSequentialStream *)&SD2, "Starting unprivileged thread 2\r\n");
|
||||||
|
tp2 = chThdCreateStatic(waUnprivileged2, sizeof(waUnprivileged2),
|
||||||
|
NORMALPRIO - 10U, Unprivileged2, NULL);
|
||||||
|
|
||||||
/* Waiting for the unprivileged thread to exit or fail.*/
|
/* Waiting for the unprivileged threads to exit or fail.*/
|
||||||
msg = chThdWait(tp);
|
(void)tp1;
|
||||||
chprintf((BaseSequentialStream *)&SD2, "Exit code 0x%x\r\n", msg);
|
(void)tp2;
|
||||||
|
// msg = chThdWait(tp1);
|
||||||
|
// chprintf((BaseSequentialStream *)&SD2, "Exit code 0x%x\r\n", msg);
|
||||||
|
|
||||||
/* Normal main() thread activity, in this demo it does nothing except
|
/* Normal main() thread activity, in this demo it does nothing except
|
||||||
sleeping in a loop and check the button state.*/
|
sleeping in a loop and check the button state.*/
|
||||||
|
|
|
@ -90,7 +90,6 @@
|
||||||
.cpu cortex-m3
|
.cpu cortex-m3
|
||||||
|
|
||||||
.thumb
|
.thumb
|
||||||
.text
|
|
||||||
|
|
||||||
.section .sandbox, "ax"
|
.section .sandbox, "ax"
|
||||||
.align 4
|
.align 4
|
||||||
|
@ -99,7 +98,9 @@ _sandbox: .long 0xFE9154C0
|
||||||
.long 0x0C4519EF
|
.long 0x0C4519EF
|
||||||
.long 16
|
.long 16
|
||||||
.long 0
|
.long 0
|
||||||
|
b _crt0_entry
|
||||||
|
|
||||||
|
.text
|
||||||
/*
|
/*
|
||||||
* CRT0 entry point.
|
* CRT0 entry point.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue