c/c++嵌入式 硬件开发 需要学什么

现在研一在读,明年想找嵌入式硬件开发的话,需要学些什么内容啊,之前学的都是偏软件方面的?

参考GPT和自己的思路:如果您想进入嵌入式硬件开发领域,需要学习以下一些内容:

  1. 了解嵌入式系统的基本原理和设计流程。
  2. 掌握 C/C++ 语言和汇编语言,因为嵌入式系统开发通常需要使用这些语言。
  3. 学习嵌入式系统的底层编程,如嵌入式系统寄存器的读写、中断服务程序等。
  4. 熟悉硬件电路知识,包括数字电路、模拟电路、传感器等。
  5. 掌握使用基本工具,如示波器、逻辑分析仪、编译器等。
  6. 学习主流的嵌入式操作系统,如RTOS、Linux等。
  7. 进行项目实践,将所学知识应用到实际项目中,提高技能和经验。

总之,嵌入式硬件开发是一门综合性很强的学科,需要具备广泛的知识和技能。希望以上信息能够对您有所帮助。

嵌入式硬件开发是一种涉及硬件和软件的领域,需要掌握的技能包括:

1 硬件基础知识:掌握数字电路、模拟电路、微控制器、传感器、电源等方面的基础知识,了解各种电子元器件的特性及其作用。

2 嵌入式系统设计:掌握嵌入式系统的设计方法、原理和实现技术,熟悉各种嵌入式系统的组成部分,如处理器、存储器、外设、总线等。

3 编程语言:掌握嵌入式系统编程语言,如C语言、汇编语言等,了解各种编程语言的特点及其在嵌入式系统开发中的应用。

4 软件开发工具:掌握各种软件开发工具的使用,如Keil、IAR等,了解各种开发工具的特点、优缺点及其在嵌入式系统开发中的应用。

5 硬件设计工具:掌握各种硬件设计工具的使用,如Altium Designer、Proteus、Eagle等,了解各种工具的特点、优缺点及其在嵌入式系统开发中的应用。

7 系统调试技能:熟悉各种嵌入式系统调试技术,如调试工具的使用、仿真测试、调试流程等,能够快速定位并解决问题。

8 嵌入式系统安全性:了解嵌入式系统安全性相关的概念和技术,如加密算法、安全协议、漏洞分析等,掌握嵌入式系统的安全设计和实现方法。

以上是嵌入式硬件开发需要学习的一些基本内容,当然还需要不断深入了解和学习相关领域的最新技术和应用。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/253387
  • 你也可以参考下这篇文章:车牌识别C++的代码错误记录
  • 除此之外, 这篇博客: C++虚函数与多态实现中的 虚函数实现与c语言中的回调函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    虚函数的发明初衷在于使得程序具有更好的通用性,从代码编写的角度看,其使用基类的指针指向子类的对象,并调用虚函数,使得根据指向的对象 而调用不同的子类函数,从而实现运行时多态(Runtime polymorphism),这个特性与c语言中的函数指针回调非常相似,在c语言中,我们将函数指针作为参数传递给其他函数,然后调用,根据其指向的不同函数而产生不同的行为,c代码示例如下

    #include <stdio.h>
    
    typedef void(*func)(void);
    
    void foo() {
        printf("foo() called\n");
    }
    
    void bar() {
        printf("bar() called\n");
    }
    
    void callback(void* fn) {
        ((func)fn)();
    }
    
    int main() {
      callback((void*)foo);
      callback((void*)bar);
      return 0;
    }
    

    可见,callback()函数根据传入的函数指针的不同使得其调用的函数不同,因此对于callback函数来说,其发生了运行时多态(Runtime polymorphism),从汇编的角度看,其对应的汇编代码可以是

    ## call
    call *%rdi <fn>
    

    其中 %rdi 寄存器保存函数的第一个参数,*%rdi表示寄存器存的是调用地址,此行汇编执行完后,栈空间将返回地址压入栈中,程序计数寄存器 pc的值将保存为%rdi 里的内容,控制转移至调用的函数中。

    下面来看C++中虚函数是如何实现多态的,先给出一个使用virtual关键字的多态实现

    #include <iostream>
    
    using std::cout;
    using std::endl;
    
    class A {
        public :
            virtual void foo() {
                cout << "A::foo() Virtual Table address : "
                     <<(void*)(*reinterpret_cast<int*>(this)) << endl;
            }
    
            virtual ~A() {
                cout << "~A() Virtual Table address : "
                     <<(void*)(*reinterpret_cast<int*>(this)) << endl;
            }
    };
    
    class B : public A {
        public :
            void foo() {
                cout << "B::foo() Virtual Table address : "
                     <<(void*)(*reinterpret_cast<int*>(this)) << endl;
            }
    
            ~B() {
                cout << "~B() Virtual Table address : "
                     <<(void*)(*reinterpret_cast<int*>(this)) << endl;
            }
    };
    
    int main() {
        A* p = new B();
        p->foo();
        delete p;
        return 0;
    }
    ===========================================
    output:
    B::foo() Virtual Table address : 0x1fe2048
    ~B() Virtual Table address : 0x1fe2048
    ~A() Virtual Table address : 0x1fe2098
    

    可以看到当析构函数定义为虚函数时,先执行子类B的析构函数,可以看到此时对象首地址4字节指向的是子类B的虚函数表,当调用父类 A的析构函数时,此时对象首地址4字节指向的是类A的虚函数表。因此析构过程大概如下

    1. 先根据子类B的虚函数表(对象首4字节)找到子类B的析构函数,然后执行
    2. 将父类虚函数表的地址覆盖对象首4字节,然后找到父类A的析构函数,并执行

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^