keil mdk b __main不进入C语言main函数入口

在调试的时候发现,从startup.s中逐步运行到b __main,但下一步就是不跳转到main函数,后来发现问题出现在以下两个函数:

1、void _mutex_acquire(void *m) 

2、void _mutex_release(void *m)

为了保证malloc是线程安全的,必须重写这两个方法,保证开关中断,但千万不能在函数里加printf打印,因为这时候还没有初始化串口,会跳不进main。

好的,我可以为您提供相关的信息,帮助您掌握在Keil MDK开发环境下进行ARM C语言编程的方法,并了解LCD、AD、LED、按键等模块的检测与驱动方法。 1. 在Keil MDK开发环境下进行ARM C语言编程的方法 步骤如下: (1)打开Keil MDK软件,选择“Project”菜单,选择“New uVision Project”。 (2)在“New Project”对话框中,设置项目名称和存储路径,选择使用的芯片类型,并选择使用的编译器。 (3)创建完毕后,系统会自动打开“Project”窗口,可以在该窗口中添加源文件、头文件、链接器脚本等。 (4)在源文件中编写ARM C语言程序,如控制LED灯的亮灭,可以使用GPIO控制,如下代码所示: ```c #include "stm32f10x.h" int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO C端口时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //设置GPIO C13引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置为50MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIO C端口 while (1) { GPIO_SetBits(GPIOC, GPIO_Pin_13); //设置GPIO C13引脚电平为高,点亮LED Delay(1000000); //延时 GPIO_ResetBits(GPIOC, GPIO_Pin_13); //设置GPIO C13引脚电平为低,熄灭LED Delay(1000000); //延时 } } void Delay(__IO uint32_t nCount) //延时函数 { while(nCount--) { } } ``` (5)编写完成后,进行编译、下载和调试操作。 2. LCD、AD、LED、按键等模块的检测与驱动方法 (1)LCD模块的检测与驱动方法 LCD模块需要使用相应的驱动芯片和驱动程序来控制,常见的驱动芯片有ST7735、SSD1289等。驱动程序可以使用官方提供的库函数,也可以自己编写。需要注意的是,在使用LCD模块时,需要设置相应的接口电平、时序等参数。 (2)AD模块的检测与驱动方法 AD模块通常需要使用ADC(模数转换器)进行检测。使用ADC时,需要设置相应的采样速率、精度等参数,以及使用DMA(直接存储访问)进行数据传输。使用ADC时还需要注意电源和接口电平等问题。 (3)LED模块的检测与驱动方法 LED模块通常使用GPIO控制。在使用LED模块时,需要设置相应的GPIO引脚、电平等参数,以及使用延时函数进行控制。需要注意的是,不同型号的开发板和芯片,GPIO的引脚编号和控制方式可能会有所不同。 (4)按键模块的检测与驱动方法 按键模块通常使用GPIO进行检测。在使用按键模块时,需要设置相应的GPIO引脚、电平等参数,以及使用中断或轮询方式进行检测。需要注意的是,不同型号的开发板和芯片,GPIO的引脚编号和控制方式可能会有所不同。同时,还需要注意消抖操作,以避免误触发按键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值