Tag: cortex m3

不能使用IAR ARM编译器强制function表到特定地址

我有一个像这样定义的函数表类型 typedef struct { uint16_t majorRevision; uint16_t minorRevision; uint8_t (*CommInit)(void *); uint8_t (*CommDeInit)(void); uint16_t (*Write)(uint8_t *, uint16_t); uint16_t (*Read)(uint8_t *, uint16_t); uint8_t (*Attached)(void); uint8_t (*ExitApp)(uint8_t); uint8_t (*Jump)(uint32_t address); uint16_t (*GetCRC)(uint8_t*, uint32_t); int (*Encrypt)(uint8_t *, uint32_t); int (*Decrypt)(uint8_t *, uint32_t); uint8_t (*Reset)(void); uint32_t (*GetTickCount)(void); void (*Sleep)(uint32_t); uint8_t (*ReadASCIIByte)(void); uint16_t (*ReadASCIIWord)(void); uint32_t (*ReadASCIIDWord)(void); void (*WriteASCIIByte)(uint8_t); void (*WriteASCIIWord)(uint16_t); […]

ARM-C互通

我正在尝试一个简单的ARM-C互通程序。 这是代码: #include #include int Double(int a); extern int Start(void); int main(){ int result=0; printf(“in C main\n”); result=Start(); printf(“result=%d\n”,result); return 0; } int Double(int a) { printf(“inside double func_argument_value=%d\n”,a); return (a*2); } 汇编文件如下 – .syntax unified .cpu cortex-m3 .thumb .align .global Start .global Double .thumb_func Start: mov r10,lr mov r0,#42 bl Double mov lr,r10 mov […]

ARM cortex-M3 uint_fast32_t vs uint32_t

我正在为STM32Fx cortex-M3系列处理器开发一个程序。 在stdint.h中定义了以下内容: typedef unsigned int uint_fast32_t; typedef uint32_t uint_least32_t; typedef unsigned long uint32_t; 据我了解。 [u]int_fast[n]_t will give you the fastest data type of at least n bits. [u]int_least[n]_t will give you the smallest data type of at least n bits. [u]int[n]_t will give you the data type of exactly n bits. 据我所知sizeof(unsigned int)<= sizeof(unsigned […]

Zeroconf名称解析

我正在开发一个带有嵌入式网络服务器的控制设备。 Web服务器为任何请求它的Web浏览器提供控制接口(从Windows浏览器,Mac浏览器,iPhone android等)。 我遇到的问题是通常知道如何访问设备的一般方法。 即在Web浏览器中输入什么地址。 固定IP对我的用户来说太技术了,可能会出错,因为我的设备可以插入许多不同的本地网络。 使用uPnp服务发现需要在某些平台上在客户端上运行软件,并不像只键入Web地址那样自然。 我想实现名称解析。 我当前的实现使用netbios协议。 因此,从Windows浏览器我可以键入// controller /并且它可以工作,但这不适用于Mac或智能手机。 我还可以尝试实现苹果mDnsresponder,它应该让Mac和iPhone玩得开心(虽然我认为我只限于//controller.local/)。 也许类似的东西也存在于Android,Symbian等,但是没有一个更通用的解决方案来创建一个我可以尝试的网络名称? 该平台目前基于TI Cortex M3处理器和lwIP。 任何有关如何找到解决方案的帮助或建议都非常感谢。 亲切的问候, 短发

每个周期的ARM M4指令(IPC)计数器

我想计算在ARM cortex-M4(或cortex-M3)处理器上执行的每个周期的指令数。 它需要的是:我想要分析的代码的指令数量 (在运行时执行)以及代码执行的周期数 。 1 – 周期数 使用循环计数器非常简单直接。 volatile unsigned int *DWT_CYCCNT ; volatile unsigned int *DWT_CONTROL ; volatile unsigned int *SCB_DEMCR ; void reset_timer(){ DWT_CYCCNT = (int *)0xE0001004; //address of the register DWT_CONTROL = (int *)0xE0001000; //address of the register SCB_DEMCR = (int *)0xE000EDFC; //address of the register *SCB_DEMCR = *SCB_DEMCR | 0x01000000; […]

在core_cm4.h上为什么会像((uint32_t)(int32_t)IRQn那样)?

在core_cm4.h的以下代码中,为什么会有双重转换((uint32_t)(int32_t)IRQn) ? 例如,在以下function中: __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); } 这样做的目的是什么?

GCC别名在翻译单元-AKA-之外运行,这甚至是适合这项工作的工具吗?

我正在使用STR32(Cortex-M3)上的FreeRTOS,并使用ST的CMSIS库来引导所有内容。 CMSIS库在启动“.s”文件中定义弱符号SVC_Handler 。 必须在某处重写它才能将ISR置于中断向量表中。 FreeRTOS定义了vPortSVCHandler ,这是我想要处理SVC中断的ISR。 我想使用我的应用程序代码(即没有修改FreeRTOS或CMSIS源代码)将两者“粘合”在一起。 我认为别名是工作的正确工具,所以我尝试了这个(在一个单独的源文件main.c中): void SVC_Handler(void) __attribute__ ((alias (“vPortSVCHandler”))); 这导致: error: ‘SVC_Handler’ aliased to undefined symbol ‘vPortSVCHandler’ 事实certificate,根据GCC文档http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html ,为了使用alias属性,您不能在翻译单元之外别名。 所以我想我会尝试将符号extern到main.c中,如下所示: extern void vPortSVCHandler( void ) __attribute__ (( naked )); void SVC_Handler(void) __attribute__ ((alias (“vPortSVCHandler”))); 这会产生相同的错误。 有什么建议??? 我真的想避免修改任何一个库。 我知道我可以编写一个简单调用vPortSVCHandler的函数SVC_Handler ,但这可能vPortSVCHandler ISR增加不必要的开销(可能取决于优化设置)。 注意:FreeRTOS示例通过自定义启动文件实现此目的。 我正在寻找一种方法来从C 或我的链接器脚本执行此操作。 编译器版本:gcc版本4.5.2(Sourcery G ++ Lite 2011.03-42) 目标:arm-none-eabi