关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" B# R, p+ P3 l, m
) t9 R" Z8 M% }0 J$ x* J    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" [' a5 R3 p9 w6 A) s9 I' X. q+ V# k9 |/ j, E/ ?' n; z
其他程序段。。。。。
# y2 T6 p; `+ }6 Z
& D5 i1 S( s# r   free(x_d);& n, s% i* `0 E+ _+ _

; z; [1 {6 H3 R) [$ C, u2 N: I使用DSP侧单独调试功能,验证动态申请没有问题,2 b5 t0 r4 N8 E
5 Z, D3 B: ^2 S( P; l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  x. o/ x$ b, F0 w, ~8 K, t" V

6 U5 @0 o, Z# H& m) w; Q" X+ S2 \" ~8 y) w% D6 d

. c6 c* M2 f: b- _8 ]$ f2 B& r# e) d0 R( k
' `. K8 p2 J8 [' P4 r) F

1 L8 n$ ~! z  d3 a- B; Y7 f8 z3 z2 F6 G! Y9 R( s9 q
4 t3 R0 O; a, \: E, m4 Z

# j' b, n" h! J' f
6 J7 x4 A  [" N: g, B% @9 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ p, l6 Q; {7 l# C" w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: E" l; v5 C/ J( D(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& @8 N, ^; Z0 \+ M5 i2 \& h
; n4 j6 z2 h! b. Q
是不是需要在DSP.CFG中进行配置
4 G, _  Y: \& X" p+ B. J) I' Q6 g我现在的配置为2 B7 q0 {; M; q5 Y
6 c3 V$ t# s$ ]' k
/*
, o7 d( G9 n( m2 { *  ======== Operating System Configuration ========
# E/ W2 f9 ?4 V( M+ ? */) c% ?; i# Z0 i/ Y2 e! S, a! N

! N+ }2 `7 U' Y9 Q9 j+ T1 [4 O, s& X/* no rts heap */0 \! f! L2 B, C
Program.heap = 0;( ^! T2 @& k8 p; N2 f6 {
Program.argSize = 100;  /* minimum size */
# q7 k0 P  k4 e8 o* c& v$ |) o+ ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 }& _& @2 |* T- b% L0 b/ z

) N( [$ t  ]* f2 Y( v/* create a default heap */
* g8 S: b% J% h! P' avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 R+ Q4 a7 u/ J: Z9 {' ]8 K/ R
var heapMemParams = new HeapMem.Params();3 {2 ^! C9 w9 ]! E( l# E) O: s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 a7 r  K$ r" Z% I. g$ z& {2 N; L
2 t$ M- v, w) ]5 Y' y* a2 ~
var Memory = xdc.useModule('xdc.runtime.Memory');3 s1 ~3 ]$ P) S2 l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 _8 p8 C" x: b; n9 Q! y- [% A! N
) I3 Y; P8 Y5 d( |2 x! A. E4 K
/* configure System module */
. M9 g, l( l, J, a2 z: Svar SysMin = xdc.useModule('xdc.runtime.SysMin');4 {8 O6 h% r4 w; _1 Y
SysMin.bufSize = 0x1000;
% ?9 m7 s2 l& Z& v  g' XSysMin.flushAtExit = false;
  V, C1 Q/ t4 ?7 T* [
" s4 P# G( U) Cvar System = xdc.useModule('xdc.runtime.System');: N/ s8 ]4 n, F8 d7 L4 ^
System.SupportProxy = SysMin;
% g) m1 l  h/ w( K" }" k: S4 M& D7 P* {
/* configure SysBios to use the lower half of Timer 1 */
! [& a0 e! _" Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% ?  l+ m3 F- ^, M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* J# T/ ^% n7 x6 I1 QTimer.timerSettings[1].master = true;
$ A' X: j/ x, h( w# A/ FTimer.defaultHalf = Timer.Half_LOWER;
7 G2 T* X) d( E- P4 N7 H, qClock.timerId = 1;  X: a7 D+ u$ W3 Z2 ^

" Y8 @' n& B. C# C/ m+ G! y# e. _/ g- {1 W7 y: C
/*
, {# `" q( `3 c7 a6 W *  ======== Miscellaneous Configuration ========
& k4 H- `- a+ G0 i: V$ ` */
( y+ H- ]3 B& A7 P! ^! Y8 D1 c: u
9 Q$ a& D5 s  k/* set default diags mask */- |' L+ C: B1 ^7 j/ m/ B( ~/ p0 U
var Diags = xdc.useModule('xdc.runtime.Diags');6 _7 ]9 u5 e5 R7 l
var Defaults = xdc.useModule('xdc.runtime.Defaults');" j. j1 |/ ]5 j, g) z

0 D8 T2 J6 B( O$ r! |$ `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. p5 W$ _, n1 BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ v6 {/ H; q1 a2 H3 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ F7 r( k+ t4 {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" P) U4 E( R! [; Y5 a+ B/ v
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; R/ w& E' L6 C7 t" R  `$ v7 Y3 A7 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ j8 D9 W9 d, \( N6 v2 I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 f1 t* V% K7 R  J$ v: P+ N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- X1 C* P: a: F7 Y) W. C% j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 p  m5 h4 N) ^$ g% v* hDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' ?# J  I/ P% w0 T7 Q7 N3 IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 I; t9 l" s- J5 z, h/ Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; M2 a$ M0 y' L" h  M( Y# }- T# z( y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* n3 s+ h* ]( s. [1 P1 @: j, t' S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 _7 B! o& \, Y3 B% @' v. B6 Y. z4 G7 J3 G
/* override diags mask for selected modules */6 r, R2 j% P# U" Y5 O1 |: w
xdc.useModule('xdc.runtime.Main');
3 b4 t/ Z% J4 k( ]( i9 ]" ]Diags.setMaskMeta(+ i" S) e2 o5 b# V/ d
    "xdc.runtime.Main",
5 e! m! Y+ w  @0 Z! @, ^& t. U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 e0 ?% G' @7 s% }* }3 l4 Z    Diags.RUNTIME_ON0 F3 l4 R& O6 u8 z2 u: ]
);9 [0 M5 U, ?, ~
1 i* T! o" f% e. q) q% Y
var Registry = xdc.useModule('xdc.runtime.Registry');
  G7 F8 S) n) ^; i4 d3 ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) e* C/ D+ `# y% I) D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% i; O, B7 C* JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# N: X; Z: M, i& X" A, F' f/ }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 h; O1 ?' C8 M& `+ ^7 N% ^
9 v8 C$ \- A5 ~1 k
/* create a logger instance */4 k6 P4 K0 K8 n  u( z" _$ v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% |5 K2 ^, S; a  R) N4 Mvar loggerBufP = new LoggerBuf.Params();
  J) C9 A# Q0 S% c2 S3 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) R7 p+ u4 _2 m/ I$ J% c2 hloggerBufP.bufType = LoggerBuf.BufType_FIXED;
- m" D, h1 U( A
3 U2 ~$ g0 n$ d7 Svar appLogger = LoggerBuf.create(loggerBufP);
4 M+ ?3 H/ I# n% S+ ~appLogger.instance.name = "AppLog_Core1";
; X2 f! S. M, n1 N; `Defaults.common$.logger = appLogger;2 j! b2 B% d+ _2 R$ Y
Memory.defaultHeapSize = 0x8192;    9 F( h; T1 E" m8 I7 t1 d
Idle.idleFxns[0] = "&LEDStatus";3 Q0 P$ T, ]3 x+ F
Cache.initSize.l2Size = Cache.L2Size_32K;- O; w" K+ R5 w. C

& e' j( }8 m* O7 j# K* Z& V1 k
回复 支持 反对

使用道具 举报

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 */) L+ _# H) n& F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* [" t* r( k0 L0 T4 l
var heapMemParams = new HeapMem.Params();4 L3 e5 r) S! m* q2 E- N+ `( J
heapMemParams.size = 0x4000;- V) U3 a* @' S; K% @
+ A/ Q- X* D& V9 F
var Memory = xdc.useModule('xdc.runtime.Memory');( e, w2 C. Q8 h9 J# [' }. \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; x1 p) z# ]2 T! v9 |" ?2 X( ?0 r: a; ?" d* S# g3 ]
我大约calloc  每次共计大小为5K*16bits,
7 ]. `) `! J" d' k* `* I( F而默认配置才0x4000、需要改大。/ W) v: r, t0 k' R( I* u

/ G. ]  E0 q' N( g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, x: V! o; G) ^" u
Program.heap = 0;
0 v- O: q- ~( @, {) D" CProgram.argSize = 100;  /* minimum size */: x6 l9 \2 i; }, e/ D5 Y; j8 D1 v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-1 19:35 , Processed in 0.046346 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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