请问在keil环境下,STM32(M3系列)如何调用dll这样的动态库 20

有没有具体的实例代码或者思路,有参考的文档也可以。... 有没有具体的实例代码或者思路,有参考的文档也可以。 展开
 我来答
link专注休闲娱乐
高能答主

2021-10-22 · 关注影视娱乐,关心休闲娱乐
link专注休闲娱乐
采纳数:169 获赞数:61121

向TA提问 私信TA
展开全部

这个是不能调用的,dll是window系统的库功能调用,stm32压根就没有window系统支持,别想了。

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案。

通过一个集成开发环境(μVision)将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

公司简介:

Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。

Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。

Keil公司制造和销售种类广泛的开发工具,包括ANSI C编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-time kernel)。

有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。其Keil C51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。

huzi2099
2018-05-01 · TA获得超过1172个赞
知道小有建树答主
回答量:1887
采纳率:82%
帮助的人:637万
展开全部
不能啊,dll是window系统的库功能调用,stm32压根就没有window系统支持,别想了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
芬达醇
2019-02-21 · 超过17用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:29.6万
展开全部
我也在看这样的方法,当然dll不是Windows的dll,而是由Keil等嵌入式环境编写的运行与STM32的程序。
编写如下结构数组
在DLL中
struct{struct {char FunctionName[LEN];void* Place;}APIS{LEN2], size_t Lenth;}Api;
void Dll_Import(char * FunName, void*Entry);将要给其他程序的的API安装
void* DllSerch(char* FunName);用于其他程序调用DLL程序。
void Dll_ImportAll(void);用于加载所有API
编译完成后打开map文件,将DllSerch与Dll_ImportAll的地址记录下来,例如0x08002400与0x08002600
在exe中,定义如下函数
void DllSteup(void)
{
typedef void (*Dll_ImportAllType)(void);
Dll_ImportAllType Dll_ImportAll = (Dll_ImportAllType)0x08002600;
Dll_ImportAll ();
}
void* DllExport(char * FunName)
{
typedef void* (*DllSerchType)(char * FunName);
DllSerchType DllSerch = (DllSerchType)0x08002400;//此地址为map文件中的地址
return DllSerch(FunName);
}
下面示例;
在Dll中有函数Usart_Transfer
void Usart_Transfer(char* Buffer, size_t Lenth);
在DLL中的调用Dll_ImportAll()实体中添加 Dll_Import("Usart_Transfer", Usart_Transfer);
在APP程序中
typedef void (*Usart_TransferType)(char* Buffer, size_t Lenth);
Usart_TransferType Usart_Transfer = (Usart_TransferType)0;
void main()
{
DllSteup();
Usart_Transfer = (Usart_TransferType)DllExport("Usart_Transfer");
Usart_Transfer((char*)("Success"), 8);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式