CMSIS_5 | CMSIS Version 5 Development Repository | Frontend Framework library
kandi X-RAY | CMSIS_5 Summary
kandi X-RAY | CMSIS_5 Summary
The following is an list of all CMSIS components that are available.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of CMSIS_5
CMSIS_5 Key Features
CMSIS_5 Examples and Code Snippets
Community Discussions
Trending Discussions on CMSIS_5
QUESTION
I am trying to link Cortex-M4 firmware with clang + lld. The gcc build works fine. I am using the stock CMSIS linker script with only RAM & ROM size adjusted (bases are the same). Beginning of the script (without comments):
...ANSWER
Answered 2022-Feb-08 at 09:57I fixed it by removing COPY
and adding NOLOAD
to the stack section. It builds and runs fine both with gcc and clang.
QUESTION
I came across code similar to this in the ARM CMSIS-NN library:
...ANSWER
Answered 2021-Oct-30 at 23:58It is always sign correct and forces the use of the proper FPU instructions and works with any type of data.
QUESTION
I am using CMSIS API in my C program for ARM Cortex-M CPU.
CMSIS defines NVIC_DisableIRQ
function as
ANSWER
Answered 2020-Sep-07 at 11:37Assuming that SCB->ICSR -16
results in a uint32_t
result, then you can't assign that to an enum
variable (10.3) nor are you allowed to cast it to an enum
(10.5). This is because enums have implementation-defined size and signedness.
I suppose there might be various dirty tricks to dodge MISRA, but that defeats the rather sound rationale of these rules, which boil down to: don't use signed operands all over your code to make it go haywire in various subtle and severe ways. Such as changing the default compiler enum type causing all interrupts to change behavior - that is not good - dangerous as can be.
The root of the problem is the enum
type and CMSIS function __NVIC_DisableIRQ
that requires an enum
. If that one had been written differently, we could have used unsigned types. Pretty strange that sloppy non-MISRA compliant libraries are still getting rolled out in the year 2020.
I would suggest that you drop that function and write a custom one. Most of these functions are just wrappers around simple single-line assembler instructions or register writes anyway, so if you have access to the function implementation, it might not be much of an effort.
Note that MISRA-C (10.5) allows casts from enum to unsigned, so if you make an API based on uint32_t
you may still be able to pass on the enum values by casting them.
QUESTION
I am using https://github.com/ARM-software/CMSIS_5/blob/develop/Device/ARM/ARMCM33/Source/startup_ARMCM33.c file with following modifications:
...ANSWER
Answered 2020-Aug-25 at 20:16Global variables are initialized after your function is executed. So any modification to variables that are in .data and .bss segments will be lost and overwritten by the static initialization routine.
Drop the method you are doing and use the gcc non-portable extension __attribute__((__constructor__))
to execute a function before main but after static initialization or alternatively add the address of the function to the .init
section. Links newlib/arm/crt0.S gcc function attributes newlib/init.c gcc initialization
A pseudocode example to illustrate what is going on:
QUESTION
I am trying to understand how the cascaded biquad filtering is optimized for Arm processors in CMSIS using Neon extensions.
The code is ifdefed under #if defined(ARM_MATH_NEON)
here, and documentation is here.
The NEON intrinsics are used when there are more than 4 biquads cascaded. I am puzzled how could any kind of parallel instruction execution be done if output from one biduaq is fed as input to the next one? Could anyone explain what is done in parallel in that peace of code?
...ANSWER
Answered 2020-Jul-17 at 00:27Here’s the formula from the documentation:
QUESTION
Is there anyone know this CMake build issue? I saw several similar question, but they are on Window
In my case,
- OS: Ubuntu 16.04
- CMake version: 3.11
When I write terminal below
cmake -DROOT="/home/kyuhwanyeon/workspace/2000_CMSIS_ws/CMSIS_5" -DCMAKE_PREFIX_PATH="/home/kyuhwanyeon/gcc-arm-none-eabi-9-2020-q2-update/" -DCMAKE_TOOLCHAIN_FILE="/home/kyuhwanyeon/workspace/2000_CMSIS_ws/CMSIS_5/CMSIS/DSP/gcc.cmake" -DARM_CPU="cortex-m7" -G "Unix Makefiles" ..
Then the result,
...ANSWER
Answered 2020-Jul-01 at 04:37The add_link_options
command was not available in CMake 3.11. You can read this version of the CMake manual here: https://cmake.org/cmake/help/v3.11/manual/cmake-commands.7.html and see that it's not listed.
You'll need a newer version of CMake in order to build this software.
You should tell the author of the software that they should specify the correct minimum version of CMake their CMakeFile.txt file requires, so that the errors are more clear. If they'd specified that they required CMake 3.13 (where this option was introduced) or better then you'd have received a message that you needed to upgrade CMake.
QUESTION
I am currently working on generating C++ code from SVD files.
While researching what I could assume on bit-field layout in the ARM Application Binary Interface, I came across ARM's official C header file for the Cortex-M7 core (commit 10a6d292f2 at the time of writing).
It contains the following code:
...ANSWER
Answered 2020-May-27 at 22:57While other architectures have/do have a bit endianness as well as byte/word endianness arm does not as is clearly stated and shown in picture for in their documentation. But 31 is always bit 31 independent of endianness what byte address bit 31 lands in is what is affected by (byte addressable address) endianness and if it is a register then
The endianness setting only applies to data accesses. Instruction fetches are always little endian.
All accesses to the SCS are little endian
Default endianness is chosen by the chip vendor not ARM:
ARMv7-M supports a selectable endian model in which, on a reset, a control input determines whether the endianness is big endian (BE) or little endian (LE).
The AIRCR.ENDIANNESS bit indicates the endianness
Bits[10:8] reset to 0b000 , see register description for more information.
cortex-m7
Support for ARMv7-M big-endian byte-invariant or little-endian accesses.
I had that backward in my comments, armv7m does show byte invariant, or BE-8 using an arm term.
So the strap pin is not called out in the cortex-m7 trm, didnt look at the m3, m4, m8.
The chip vendor has the biggest role here in how the chip works and what strap options or other compile time options were made for the core. Then their is their implementation and how well it does or doesn't conform, only the stuff in arms domain is within arms control, outside that it is chip vendor (including bit endianness).
So registers within arms domain should be little endian (if less than word addressable) and bit 31 is bit 31 in the same byte address (if byte addressable).
bit-fields have nothing to do with any of this they are implementation defined by the compiler author and versions of the language spec (C or C++) have evolved over time but it is still a really bad idea to use bitfields, you are not that tight on memory if you are using a compiler, the 1970s are over. You should never point structs nor unions across compile domains as those are implementation defined as well and not target defined nor language defined. (I use examples like these as interview questions to test the candidates experience and knowledge of the language). ARM and the chip vendors will clearly and legally state where their code should run and that they have no responsibility for the quality or failures from that code, basically it is all on you, so use code like that with care, and protect yourself, esp if you see this bitfield struct union thing (I normally toss the whole library if they can't get that part right what else to I have to dig for).
So you cannot really devise any theories about what you see in bitfield based code, read the (good/better) documentation from ARM (meaning the architectural reference manual and the technical reference manual. AMBA/AXI manuals. The programmers references have been problematic) as well as whatever the chip vendor provides which is often not detailed at that level, and then do experiments for that chip and that core and make no assumptions about other chips from that vendor nor that core used in other products with that core same vendor or not.
The safe play is to go little endian with almost anything arm. xscale is/was an exception I think Marvell bought those from Intel, as well as mixing in cores they buy from arm directly. I seem to remember the xscale I used could be used little endian, making a big endian gcc toolchain was a nightmare at best. I have not seen any cortex-ms from the major players, I have many but not all of course, st, nxp, atmel so far I have only seen little endian. ti has a cortex-r that they offer big or little and you can't switch but those are not cortex-ms.
Stick with little endian with the cortex-ms, if you get screwed by a vendor, 1) that product wont last or was made for a specific customer 2) Blacklist that vendor for that kind of behavior. Otherwise you should have a happy life and not have to mess with toolchains not working be8 vs be32, internal core registers vs bus accesses to the outside vs external to the core registers implemented by the chip vendor. There is nothing to indicate that ARM will change it stance on endianness, it would be a bad, possibly fatal, move at this point, think of the endian choices you see in the documentation as marketing bullet points, yes we support big endian and little endian, and not features you would actually use.
QUESTION
I am working with STM32F103C8T6 and would like to use CMSIS, which is essentially just register definitions and no code, to make my life easier while still staying at a low level. The problem is that I have no idea how to install the library for use on the command line with Makefile. All documentation seems to be bound with a vendor-specific IDE like STM32CubeIDE.
I suppose the first thing to do is to download the CMSIS library, which I found on GitHub. However, after unzipping ARM.CMSIS.5.6.0.pack
I found no files named stm32f10x.h
. I spend some more time and found a CMSIS pack for the specific MCU I'm using, but it doesn't contain core_cm3.h
, which however presents in ARM.CMSIS.5.6.0.pack
. The document says I need to include both to my project, so do I need to copy the files downloaded from different places to my project, or what?
As a bonus question: what is the relationship between CMSIS and Keli? The device-specific CMSIS pack is downloaded from www.keil.com
, but I don't want to use Keil MDK for now, as it appears to be a commercial product, and the GNU Arm toolchain is serving me pretty well.
Edit: I should have been more specific from the beginning, but now let's focus on how to build the Basic CMSIS Example as a minimal, complete and verifiable example.
What I have done:
- Download and unzip CMSIS-Core and CMSIS-DFP to
/Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0/
and/Users/nalzok/Developer/CMSIS/Packs/Keil.STM32F1xx_DFP.2.3.0/
, respectively. - Create a file named
main.c
, and copy the content of the basic example to it. - Add
#define STM32F10X_MD
on the very first line to specify the chip. - Fix typos: replace the
:
on line 31 to;
, and replace line 33 totimer1_init (42);
. - Build and get an error
ANSWER
Answered 2020-Feb-10 at 23:48For the part of CMSIS your are referring to, some is supplied by ARM (CMSIS core) and some is supplied by your chip vendor (Device Family Pack). As you have discovered, CMSIS software packs are just zip files by another name. You may unzip them wherever you wish. As you are aware, core CMSIS and most of the vendor specific part consists of just header files. It is then necessary to include the proper directories in the compiler include path, typically using -I...
command line options.
One type of vendor software pack is called a Device Family Pack. In addition to vendor specific peripheral definitions, they usually contain start up code and often times linker scripts that match the layout of the SOC memory. These are worth finding and will save the work of vector table layout and other such low level code.
For the bonus: Keil is a maker of software tools and is owned by ARM. The nicer features of CMSIS software packs, like distributing and updating them over a network, are supported by the Keil IDE and Keil maintains a repository of common SOC packs. I also usually use the GNU compiler, but have used Keil and its built-in CMSIS awareness and software pack availablity to good effect. I have even built a few software packs for custom work. I suggest a continued reading of the CMSIS documentation paying some attention to the section on packs. You don't have to have an IDE that manages the packs for you. Since they are simply zip files, you undertake that task yourself.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install CMSIS_5
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page