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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  e! X& I% @* t7 H: P9 s, {1 E; h

# j' w# v) R* J0 }# D0 H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* Y: ~" r! u" J* C' h1 l3 @
. i* K2 v% Y) ?, m! t3 S
其他程序段。。。。。
$ J9 o2 V8 v% A# C2 L9 ]0 Q$ M ' I/ l4 \; h& B9 V% e6 a# u
   free(x_d);
1 M" P1 R6 ~  ~# z4 B' V/ U( s) m/ G
% C, k/ B2 e8 H使用DSP侧单独调试功能,验证动态申请没有问题,0 J; `. H! h, o& x2 e' }" q

# R: {1 R7 v; N% L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% H  R- q0 {: X- c

+ R0 d! ?! H4 m  n0 o" T* V& [. Y' J) T; V' \& o

9 f- L" M2 _. |, _& ^+ Q6 e* R2 `  ?- L

! h: w" ?9 {6 K5 _$ X3 W+ r$ U& J) ~& D5 v4 N$ }/ s8 e

: A  B3 T$ Z/ A: Q2 H' u) a
% D6 v2 K& j, W, m; l" I8 ~/ g5 S
; @$ v# E4 \' s. U* Q% U: Y! \" j7 F/ I3 s2 q1 v$ ?; x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 s4 y. e* ^- q0 ], |3 B# _3 ^6 M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 g' U4 c7 e4 ~$ l" I1 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 S5 u9 p* e6 J1 U0 k
. s/ V$ E5 W* q8 P7 A' u5 s1 o; o
是不是需要在DSP.CFG中进行配置
. o8 Y. ]( n/ O; C) f我现在的配置为+ x, x/ G8 X. L. j" ?

, ]) V! I$ E7 E3 V/*: e$ Z: F! S7 c* d8 d7 l) u# d
*  ======== Operating System Configuration ========
% O% O1 ]+ x. c" c1 u. s" W */2 b, [7 g' F" l6 K. w, X& [
: F. b+ K; q6 w- @
/* no rts heap */
6 ~; t( Y+ R# k) WProgram.heap = 0;: _9 T! k) z$ p0 R; ~- d
Program.argSize = 100;  /* minimum size */8 ]. A5 V0 w/ t' Y5 J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 j. s7 V+ Q0 ]* ]. Y9 {

. _% ~4 E1 [0 j( h$ B* T: ?/* create a default heap */
8 `0 c# w  Y, D, ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- I/ G0 J: {( q5 x% J  p# b' ]/ @2 Y( fvar heapMemParams = new HeapMem.Params();- M% V: W% Y, V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ b: M1 H- E0 u' D

0 K) Z2 O$ ]& ?1 N, B% S3 t
var Memory = xdc.useModule('xdc.runtime.Memory');$ m+ X: u' R# r# P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 _; P) G$ w# X$ ]3 c) F# |; n
: W8 N, B+ ]2 P% m/* configure System module */" v  d& Z, @( H) B; {. w  o
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. E5 b+ V. R1 O) K, GSysMin.bufSize = 0x1000;1 u4 R& {, i; t. |9 d) `# I' {
SysMin.flushAtExit = false;' g, L3 ?" p1 g. K
& Q4 o  ?, E! j, h! U
var System = xdc.useModule('xdc.runtime.System');% G8 t* G- Y2 K; P7 U
System.SupportProxy = SysMin;& A6 c3 v, y) K) D2 b1 U! u

) {8 ]. h3 T; k# \! [) @5 h/* configure SysBios to use the lower half of Timer 1 */
& P. _& B* w/ r5 Y, vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' c' d1 f9 w4 p! o3 |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ a6 H3 ]6 L' v# a) lTimer.timerSettings[1].master = true;
& K; b3 ^6 h) H: \- U# a2 t# ~Timer.defaultHalf = Timer.Half_LOWER;
% O5 w8 W5 P, {! R/ y; w; yClock.timerId = 1;
& w( R) T7 G& N  e  I  t
+ i* }8 O9 }2 G, w
9 {* o  [, t( f3 Q/*
5 ?& M: e. _' @  |9 ^ *  ======== Miscellaneous Configuration ========
0 I- t0 I, ?6 C# H  M5 N( z */
& g" U# y! T5 s9 k% z- i
7 R6 J$ j8 J, d( Q5 i5 v' B4 v7 M+ g4 k/* set default diags mask */
$ j) T6 O6 }/ B- s! cvar Diags = xdc.useModule('xdc.runtime.Diags');
; h: v; z6 H7 W& l- Z$ }var Defaults = xdc.useModule('xdc.runtime.Defaults');4 V3 P8 b$ W+ ?& o  N. @

8 B% o  y1 @# ODefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# U  o- g9 w3 aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' [2 q& ]- I& `* e( u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- U! e! n% d/ _9 C: O: q- wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% W6 K: K5 u/ t& w' l& P: l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* n, S  @& Q3 t/ ~9 T8 a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 @  j8 ^- ~1 zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; ^" w. e, L2 O, C, s; ]2 e5 b* RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* s! D6 d4 B9 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% s7 o+ k0 A3 z! p6 J: Q7 V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% d2 L$ w4 T4 A. }( oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( G0 F, _5 J' l5 G8 g  C
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 Y3 V6 _& F/ X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. l/ R4 y0 u$ c* I8 h# z3 rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 v$ j3 ^+ v  o7 O6 F) y% f& S
4 W& I% S, |' V# {, ?9 A6 |( S+ e) U/* override diags mask for selected modules */
9 ~0 m8 U, Z# N5 [/ |+ Q. Vxdc.useModule('xdc.runtime.Main');
0 ^/ Q; t1 k+ T( k# _Diags.setMaskMeta(7 ~4 A, P( W1 ~' k' B. O! C  ~
    "xdc.runtime.Main",/ j* k1 B( e# g; M" n* Q* F# Y  F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 W9 R: ]! \; _5 e
    Diags.RUNTIME_ON& Z$ ^& N: y) R
);
% E: j$ Z  o' n5 E; L0 I0 z
1 }% N" c* @5 Bvar Registry = xdc.useModule('xdc.runtime.Registry');
5 m2 @* U. e; A0 e" v7 O0 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. T' e1 H. R! R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 [/ a) O) U! N1 h1 g( q3 p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* P) i6 M% h% ~8 X' r0 ~4 X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ N* a0 x# J+ R- w- C
8 C2 c* ?; r) k1 y" I3 j, x
/* create a logger instance *// w/ j1 H: e4 Y3 E& q0 `0 F3 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* I/ ^! W: z' P+ e+ z! u
var loggerBufP = new LoggerBuf.Params();$ n3 ], t$ q0 n( F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, Z1 _8 Y; P6 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ t# Z. B$ q' E0 n3 C- U4 T6 B. ]

/ M" X9 C6 y' G. q+ gvar appLogger = LoggerBuf.create(loggerBufP);
$ z2 A. @$ }" ^( h9 Q7 J; IappLogger.instance.name = "AppLog_Core1";8 H2 g% u/ k  j; J
Defaults.common$.logger = appLogger;
. \, A# i1 W3 W+ _- f) B5 jMemory.defaultHeapSize = 0x8192;    , @. O; S5 q2 [' t
Idle.idleFxns[0] = "&LEDStatus";: K4 d' U" B" M
Cache.initSize.l2Size = Cache.L2Size_32K;
' h8 `5 u' a0 F* k; i+ b+ [
; {7 |" X) n9 h! m' Z/ T6 B
回复 支持 反对

使用道具 举报

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 */
5 x! v) |, ^. b* W3 k7 a. t: Y3 |" I7 `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 ^, i1 f8 P  G3 _
var heapMemParams = new HeapMem.Params();
+ D1 o  R) S, G( l+ p& IheapMemParams.size = 0x4000;
0 {) J: B4 d4 e# ]1 m
- l$ S' ?1 k: Uvar Memory = xdc.useModule('xdc.runtime.Memory');3 Y: b* u- U8 W# s/ X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: L6 e2 J: H# i' E

4 Y; ?! L% u+ f) q2 Q, r' B我大约calloc  每次共计大小为5K*16bits,: A* ?* h9 b/ L( ?/ c, K+ R
而默认配置才0x4000、需要改大。- P# Z% d: o" ^) N$ [

  I( c$ T- ~- ~/ L' H0 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# c: U$ y- i  j' X6 W5 e  }; WProgram.heap = 0;2 H4 q1 E1 i7 V" r4 `1 B" h
Program.argSize = 100;  /* minimum size */
. g; Q( u: H# V. UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 02:34 , Processed in 0.050935 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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