Author Archives: Robins

Nucleus plus protection mechanism (based on ARM processor)

(Nucleus Plus is a non open source operating system, only limited code is provided for reference)

1. Nucleus plus protection mechanism

Nucleus plus kernel uses TC for small code protection_ Protect only in TC_ The interrupt is only turned off during protect operation, so the interrupt response and scheduling of Nucleus Plus kernel is more timely than that of μ C/os-iii and ThreadX; mutex is only used for applications (mutex between threads).

TC_ Protect contains two members. One record gets TC_ Thread pointer TC of protect_ tcb_ Another mark is whether there is a thread waiting for TC_ The variable TC of protect_ thread_ waiting。

2、TC_ Protect acquisition (TCT)_ Protect)

Off interrupt

1624         MRS     r1,CPSR                     // Pickup current CPSR
1625         ORR     r1,r1,#LOCKOUT              // Place lockout value in
1626         MSR     CPSR_cxsf,r1                     // Lockout interrupts

Check TC_ Is protect occupied (check TC_ tcb_ Whether the pointer is empty; if it is not occupied, jump to TCT_ Protect_ Available, set TC_ tcb_ The pointer is the pointer of the current thread, and you can turn on the interrupt again. If it is occupied, you will check whether it is occupied. It is similar to the spin lock of Linux kernel, but Nucleus Plus is single core, so the current thread needs to switch out of the CPU.)

1632 TCT_Protect_Loop:
1633         LDR     r1,[r0, #0]                 // Pickup protection owner field
1634         CMP     r1,#0                       // Is there any protection?
1635         BEQ     TCT_Protect_Available       // If NU_NULL, no current protection

Set TC_ thread_ Waiting is 1 (indicates that there is a thread waiting for TC)_ PROTECT)

1642         MOV     r2,#1                       // Build thread waiting flag
1643         STR     r2,[r0, #4]                 // Set waiting field

If TC_ Protect is occupied. Save the context of the current thread and call TCT_ Schedule_ Protected scheduling takes up TC_ Thread of protect (the current thread is the thread with the highest priority and occupies the TC_ The thread of protect has a lower priority. If you don’t actively schedule the thread of low priority, the thread of low priority will never be able to execute, TC_ Protect will never be released)

1648         STR     r0,[sp, #-4]!               // Save r0 on the stack
1649         STR     lr,[sp, #-4]!               // Save lr on the stack
1650         MOV     r0,r3                       // Place current thread into r0
1651         BL      TCT_Schedule_Protected      // Call routine to schedule the
1652                                             // owner of the thread

3、TC_ Protect release (TCT)_ Unprotect)

Check TC_ thread_ Whether waiting is 0. If it is 0, no thread is waiting for TC_ Otherwise, there are higher priority threads waiting for TC_ PROTECT(TC_ There is no interrupt in the process from the acquisition of protect to the release of TC_ Before protect, a higher priority thread may be ready to apply for the same TC_ If there is no thread waiting for TCT_ Unprotect, simply set TC_ tcb_ If the pointer is empty, turn on the interrupt; otherwise, call TCT_ Control_ To_ System rescheduling (waiting for TCT)_ The unprotected thread may not be the thread with the highest priority at this time, but the scheduler obtains the highest priority ready thread for execution;

TCT_ Control_ To_ System checks whether the time slice of the current thread is used up; if it is not used up, it will continue to execute the current thread (to avoid frequent thread switching, so TCT is called)_ Control_ To_ TC is not set before system_ tcb_ If the time slice is used up, set TC_ tcb_ Pointer is empty, TC_ thread_ Waiting is 0 (wait for TC before)_ The thread released by protect is no longer waiting for TC_ Protect. After the thread is scheduled, it returns to TCT_ Protect_ Loop is equivalent to calling TCT again_ Protect, reacquire lock (wait for TC for some reason)_ Thread released by protect is suspended, TC_ thread_ The waiting flag cannot always be set to 1, otherwise other threads will release TC_ When protect, it will mistakenly think that there is a thread waiting for TC_ Protect release), call TCT_ Schedule selects the highest priority ready thread for execution. (thread scheduling reference) https://blog.csdn.net/arm7star/article/details/105565769 “NucleusPLUS interrupt processing (based on ARM processor)”

1783         LDR     r2,[r0, #4]                 // Pickup thread waiting flag
1784         CMP     r2,#0                       // Are there any threads waiting?
1785         BEQ     TCT_Not_Waiting_Unpr        // If not, just release protection

4. Summary

To some extent, the protect mechanism of nucleus plus can be regarded as priority inversion, that is, high priority threads give up CPU to low priority threads. Nucleus plus does not implement dynamic priority, and protect avoids deadlock.

 

How to generate lib library with keil MDK and use lib Library

reference resources: https://xiaopengzhen.blog.csdn.net/article/details/90036247?utm_ medium= distribute.pc_ relevant.none -task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control&dist_ request_ id=1331647.11602.16183926662894565&depth_ 1-utm_ source= distribute.pc_ relevant.none -task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control

 

1. Organize the source files to be compiled and encapsulate the interface.

2. Add the source file to the MDK project, for example:

3. Setting in MDK: check create library and set the file name of Lib library

4. Compile and view the output file.

5. How to use it will not be repeated.

 

Git Clone Error: ‘fatal: HTTP request failed‘

There are several possible reasons for this situation

1) Problems with git version

2) The system time is wrong

1) For the first case, use this command to see the GIT version.

git –version

Most of the time, just uninstall the original GIT and re install a newer version. ( https://www.kernel.org/pub/software/scm/git/ perhaps https://github.com/git/git/releases )

2) For the second case, just modify the system time directly.

Use commands to modify, such as:

date -s “25 MAY 2019 17:30:00”

Manual modification is also possible.

Opensuse12.3 installation of VirtualBox error resolution

At the beginning, you will be prompted what to install DKMS, and then you will see the error as shown in the figure after downloading and installing, that is

sincerefly@linux-eq1f:~/Downloads/iso$ sudo rpm -Uivh dkms-2.2.0.3-1.noarch.rpm
root's password:
Ready...                          ################################# [100%]
        package dkms-2.2.0.3-1.noarch is already installed
sincerefly@linux-eq1f:~/Downloads/iso$ sudo /etc/init.d/vboxdrv setup
Stopping VirtualBox kernel modules                                                                            done
Uninstalling old VirtualBox DKMS kernel modules                                                               done
Trying to register the VirtualBox kernel modules using DKMSError! echo
Your kernel headers for kernel 3.7.10-1.16-desktop cannot be found at
/lib/modules/3.7.10-1.16-desktop/build or /lib/modules/3.7.10-1.16-desktop/source.
                                                                                                              failed
  (Failed, trying without DKMS)
Recompiling VirtualBox kernel modules                                                                         failed

I don’t know what’s the reason. It’s not good to worry about virtual machines. One is to learn from CentOS. The other is to do experiments. It’s not safe in the physical system, but it’s OK. There’s Baidu. If there is a problem, it needs to be solved

Search for

   sudo apt-get install dkms build-essential linux-headers-$(uname -r)
   sudo /etc/init.d/vboxdrv setup

It’s just a Debian command

I see such a sentence in it

The reason is that the corresponding package for the corresponding kernel is missing. Although I have executed the install command for kernel-devel before, the corresponding kernel-devel for the uek kernel is not installed, the correct one should be kernel-uek-devel.

That “kernel devel installation command” misled me for a long time, suddenly woke up, it was the package.

This is easy to do. Use zypper search kernel devel to search, and it is

After the installation, run it again

sudo /etc/init.d/vboxdrv setup

success!

Then my VB can run.

Solution of installing Vue cli scaffold error-4048

Error report screenshot:

take a look at nodejs version and NPM version:

solution:
there is no permission, you need to use the administrator’s permission
right click the admin permission to run C: Windows/system32\ cmd.exe
If my article is helpful to you, welcome to like, leave a message and pay attention to it. Thank Sanlian!!!
The problem has not been solved!!! 😘😘😘

CSDN: I heard that you are good at playing
GitHub: zhongzhimao
Coupons: coupons

Solution to inaccessibility of Vue cli scaffold project after startup

The problem is as follows: the IP address cannot be accessed

Enter the file “project name – config”- index.js ”Open index.js File, modify parameter

after modification, it can be accessed normally:

If my article is helpful to you, welcome to like, leave a message and pay attention to it. Thank Sanlian!!!
The problem has not been solved!!! 😘😘😘

CSDN: I heard that you are good at playing
GitHub: zhongzhimao
Coupons: coupons

Opensuse12.3 enable / disable touchpad

Use the command:

xinputlist 

View devices

Find the ID of the touchpad. For example, my id = 15

Then use the command:

xinput set-prop 15 “Device Enabled”0

The last “0” is to close the touchpad, and “1” is to open the touchpad

OpenSUSE test is available. I always use the external keyboard, but I can’t use the touch pad. Anyway, I don’t need it. It’s better to turn it off. Maybe I can save some power?Ha ha
ha

Solve the problem of USB mouse failure in the laptop mode of Ubuntu

A while ago, in order to solve the problem of not saving the brightness of the boot, the laptop mode management system was installed

But recently, I happened to find that the mouse can’t be used after the power is off. Because I have no time and seldom use the notebook in battery mode, I never care about it.

If you are free today, try the online method. Solve this problem. The method is as follows

First, input lsusb in the terminal, and the display is as follows:

$lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 058f:a014 Alcor Micro Corp. 
Bus 001 Device 004: ID 0bda:0139 Realtek Semiconductor Corp. 
Bus 002 Device 003: ID 093a:2521 Pixart Imaging, Inc. 
Bus 002 Device 004: ID 1a2c:0002 

If you find multiple devices. But I don’t know which is the USB mouse. Don’t worry. I don’t know. Then look down.

Enter the following command:
0

lsusb -xv

It shows a lot of detailed information. What can we do.

Can’t you read it?

Of course not. We export the result with the following command.

lsusb -xv > ~/mouse.txt

And then do it

gedit ~/mouse.txt

We went to the “mouse” editor, and we went up there. Just look for the ID of the mouse.

Bus 002 device 003: ID 093A: 2521 pixart imaging, Inc.
this is what I found. Remember 093A: 2521

Then open the configuration with the following command.

sudo gedit /etc/laptop-mode/conf.d/usb-autosuspend.conf

Search again for “autosuspend”_ USBID_ BLACKLIST=”

I found it. Under my picture

In the double quotation marks at the end of the second line of yellow, fill in the ID of the mouse. That’s 093a:2521

. Is the mouse still working normally after saving and unplugging?

PS: my current computer is ubuntu12.04

reference resources: http://forum.ubuntu.org.cn/viewtopic.php?t=391117

Using cbmakegen to export makefile of code:: blocks

First, Download cbmakegen from the official website

Official website address: http://developer.berlios.de/projects/cbmakegen/

Can also be downloaded through my baidu disk

[Windows version] address: http://pan.baidu.com/share/link?shareid=123030&uk=1227046485

[Linux version] address: http://pan.baidu.com/share/link?shareid=123067&uk=1227046485

【Windows】

Decompress cbmakefilegen-bin-0.3.12.5-win32

obtain cbMakefileGen.cbplugin

Open plugins – & gt; manage plugins in the code:: blocks interface

add to cbMakefileGen.cbplugin

Then the generate makefile option will appear in the Project menu to export the makefile

It appears in the project directory Makefile.gen

Change the path in the user directory in Chinese Ubuntu to English

In order to make it easy for users to use, it is installed in the “home”, “music”, “pictures” and “natural” It’s all in Chinese.

Most of the time, I like to put some files to be operated on the desktop. There are many command-line operations in Linux, so it’s hard to avoid using the command line to operate things on the desktop. Then I need to “CD desktop”. When I hit “desktop”, I need to switch the input method. It’s troublesome So I tried to find a way to change the path under the user directory to English, while the other Chinese remained unchanged. The method is as follows:

Open the terminal and enter the command in the terminal

        export LANG=en_US

        xdg-user-dirs-gtk-update

Jump out of the dialog box and ask if you want to convert the directory to an English path, agree and close it.
enter the command in the terminal:

        export LANG=zh_CN

Close the terminal and restart. Next time you enter the system, the system will prompt you whether to change the converted directory back to Chinese. Select no more prompt and cancel the modification. The Chinese to English conversion of the main directory is completed~

Reprinted from: http://my.oschina.net/myriads/blog/2867

_ASSERTE((unsigned)(c + 1) <= 256);

_ Asserte ((unsigned) (c + 1) & lt; = 256);

when using VS2010 to write a program, it is a very simple program, but when inputting Chinese characters, the following error prompt appears.

at the beginning, I was obsessed with the “cannot find or open the pdb file” of the error prompt, but later found that it was not the problem there. I started to notice the following problems.

click Retry, and a breakpoint message will appear.

next, click interrupt, and the breakpoint information will appear.

it can be seen from the figure that this is one of the problems in isctype. C file.

the solution is to right-click on the project – properties – configuration properties – C/C + + – command line

and then enter “/ J”

in the input box on the lower right side to re-enter Chinese characters. It is found that the error has been solved.

reference: msdn.microsoft.com

note: for other editors, such as VS2005, 2008 and 2012, you can choose from the top of the above website. As shown in the figure below

Solution — windows 2012 installation Framework 3.5 in VMWare

Solution – Windows 2012 installation Framework 3.5 in VMWare

Mount the system image
, open the server manager, click “add roles or functions”
next
next
next
do not need to operate here, directly next
check Framework 3.5 here, and then next
click specify alternate source path option
A289885427 here you need to fill in the alternate source path
open the mounted system image, enter the specified location, copy the path
fill in the alternate source path, confirm, and then click Install
to start the installation, wait for the installation to complete
to finish the installation, and then close VMware.