关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7057|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 k0 U* v: f6 i  \* l
- A1 r+ e; T3 {/ \+ o) K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 R3 U" a$ {! ]  e* x7 o5 n

$ v6 R+ d: H2 C' V- u$ g其他程序段。。。。。5 s7 {0 p8 |0 H9 A3 B* S5 z& d% d
; i$ ~4 ]3 H1 N0 `
   free(x_d);" D0 c) ]- }+ c, T  C

8 @5 v" J4 z6 l; [  E使用DSP侧单独调试功能,验证动态申请没有问题,5 ~9 k# C: ?; I; E/ a+ w7 w+ L

( b. h# r6 U8 F6 a8 t# G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! ^& X& V. Y$ Q# `. Y
9 Q9 L5 i" ?9 Y1 j' G

0 _1 \5 _& n& _2 _
) ]2 D) X! O/ H( j4 t' Q$ @$ h) T3 N. H' H8 N

; X) C9 X& s* i* O0 b# _! ?$ |+ t; {+ K. b  f# P9 |$ X7 b
7 o6 d# G1 H, |
+ O% c- A( K( N: E0 o
! w7 Z+ _8 c4 E% V

% c1 J2 S! d: C7 @6 U' H! t+ g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& r& e) Z# e& l  z0 h0 w0 _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; E) E2 ^- _* L( M" P: G( n0 ~
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, y3 D" P3 T- M5 Q" k$ ~0 k

2 f4 G! q5 d' B* a. b是不是需要在DSP.CFG中进行配置/ B5 v1 T* l3 @
我现在的配置为
+ x% o; R" D6 I9 {3 y+ H+ T) m$ {( ^+ I; |! B+ v. A
/*( c  |$ m' L0 A4 c% }" t' }/ B+ U
*  ======== Operating System Configuration ========
; l# v) T5 m9 f. M: P; M0 z8 P */& |6 }3 u- X& X- }% ]

  Z- y5 n, S, o  |6 k* q/* no rts heap */
+ L; y/ P6 p1 E6 g/ T, b6 |( [Program.heap = 0;
- @. H! ^" q; V% r3 _Program.argSize = 100;  /* minimum size */
1 o: {9 t9 z* X( ]8 t& T; C$ O; k) dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ K$ b/ F1 x3 Y. [& V& w
5 y& [7 u$ C' n; l/ F
/* create a default heap */9 P8 n& m% W/ C1 x! ^4 Z" m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 d2 B+ i1 D( a. \
var heapMemParams = new HeapMem.Params();
% |/ b: V' Q3 t% h# WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 V8 n1 i: b1 }9 s" \
" b3 e: w2 ^! d) R
var Memory = xdc.useModule('xdc.runtime.Memory');
& Z4 I! x& j/ _8 lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ R& p8 T# D7 O0 T+ E, j4 L2 r! J

" B% F' ]1 T8 }/* configure System module */* G+ @& E6 ?4 {9 x, V( [9 S8 A# I
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ o! M9 X8 v! C) w1 M
SysMin.bufSize = 0x1000;
4 Y2 L) v: F( D: \8 y, hSysMin.flushAtExit = false;" p' s( m, p- l) ^  X3 k

+ N0 ~, ~" `4 b; ~8 F3 }8 \. ]% x% ~var System = xdc.useModule('xdc.runtime.System');
& g4 Z" R: A% E; L1 NSystem.SupportProxy = SysMin;
9 ~/ x0 l. s, Y; ~4 u8 {7 g* L; x8 m: l8 ?. ]: P
/* configure SysBios to use the lower half of Timer 1 */, p/ c; S% Y2 y" \) e# o7 n) o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 z& `4 V, P8 N5 s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 M7 U; e1 {& f7 v5 ?" H1 HTimer.timerSettings[1].master = true;
8 ~) `4 K. i" B/ TTimer.defaultHalf = Timer.Half_LOWER;
4 y) k$ _. W( S+ t0 Z" C2 f1 ^Clock.timerId = 1;
' b( M, Q+ ~# B/ B0 U9 p$ k' _1 x
( s4 D4 F$ z/ F% q3 l0 J. E6 e" X7 g
/*5 m, `" b* A4 G) |- p2 `0 d7 @
*  ======== Miscellaneous Configuration ========
9 Z! @% t2 d' r! V0 u7 n( b */  O2 _9 c& K; ^! P

' J2 ^; N/ E9 H. R: |, ]/ e/* set default diags mask */
4 {* @4 j# |5 |$ ~  {+ ^var Diags = xdc.useModule('xdc.runtime.Diags');' b; e! ?4 n9 N+ [1 W8 a
var Defaults = xdc.useModule('xdc.runtime.Defaults');  P9 b; l1 A1 K4 u/ }+ H
# o- B' m5 j3 B; K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ q) [  F6 P  D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( `' w5 x# C6 e; K3 B5 `; Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 ?$ u# p. i$ a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 v) u# ^4 V6 F( O, ]! N: y  ^4 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 L7 X% c% M, {; o/ [
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% q3 a! R% ?* N4 v  w( f8 h2 g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ e! X# L6 F' X7 J# {; _7 Q$ Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 Y6 G$ _0 Z/ r3 n3 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ @5 j+ g' N; N1 {. w( ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: W0 U, i' O. F. d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: ]; v9 Z( c# p5 JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( \" b( [* ]! b+ r) A6 m5 }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) N) m# W; v/ T+ L/ _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 N" o8 [6 L! k& H, b- Z0 X& N$ D- ?1 H1 q- u' f& q, {
/* override diags mask for selected modules */* G6 S& a# H* E/ ?9 H
xdc.useModule('xdc.runtime.Main');
, |% X8 F9 Y; L  f: bDiags.setMaskMeta(3 C% E" ~  i3 d' |) ]! D0 v$ ~
    "xdc.runtime.Main",* f: d( K+ H2 Z* p2 r2 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* W* G+ v! w5 W" O
    Diags.RUNTIME_ON
" U4 G* C  [6 U9 C/ u7 F);6 {( E; {7 b, X! g5 D, P. r

4 u5 U: K. ~" tvar Registry = xdc.useModule('xdc.runtime.Registry');
% T5 K/ G& c2 y' `' O1 v, WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 D# W, l: E! M% t1 U6 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" P- X0 h+ C+ v' e- j! }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; r& {( u5 M; e$ B; ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ E; d* K; x. b

" Y- g  u. _& L$ _5 [/* create a logger instance */
5 {: g: I$ V9 e  O  Y# Y* O! Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! z( s" n5 i, m0 {  p# g
var loggerBufP = new LoggerBuf.Params();
) m# U' R* _5 g3 r; HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: ]: I- n, I) _7 R! [loggerBufP.bufType = LoggerBuf.BufType_FIXED;, b/ P/ B/ R! {6 J8 W1 X' C$ `

; _  n0 b& `7 i* }var appLogger = LoggerBuf.create(loggerBufP);
2 b0 Z( N  x( @6 V. M: ]appLogger.instance.name = "AppLog_Core1";( J: |3 {' j  Z! [
Defaults.common$.logger = appLogger;
2 O/ b5 M" x$ LMemory.defaultHeapSize = 0x8192;    # V7 P, A0 j; Y0 H
Idle.idleFxns[0] = "&LEDStatus";
; }% q& Q+ P& a- [/ G$ gCache.initSize.l2Size = Cache.L2Size_32K;) q9 B6 m+ ]. {1 \" k: `& m

5 U. J3 e1 x% w; Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
; E+ S/ e" }/ O7 Q9 t! Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( t2 X4 T- U$ hvar heapMemParams = new HeapMem.Params();7 W" U5 g8 L# ]( \  g8 B
heapMemParams.size = 0x4000;
7 @# o! j0 L- ^$ b' B$ N; ~: z2 s$ V* f6 Z' z! U( C
var Memory = xdc.useModule('xdc.runtime.Memory');
5 {% w9 `$ e* w+ C2 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) M! ^0 \* e: Z9 K5 R' t+ U! Q1 U" t# q
我大约calloc  每次共计大小为5K*16bits,* Y' T. E% f5 j
而默认配置才0x4000、需要改大。" ?( \; ^( M# n

) b7 }7 ~3 B: T2 _5 \; ]5 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 \! e) }+ D$ ^0 h3 J1 D- x$ P# h
Program.heap = 0;! x0 U, M# p& J$ N8 s
Program.argSize = 100;  /* minimum size */
) [' Y2 ^: B* r9 L' vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-12 06:06 , Processed in 0.039208 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表