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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" j! a7 |, _; @" Z2 l6 X
% |' H6 ?) O) W+ s& g8 V: t& U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 I) e/ W8 H: y' n5 Q0 J- D
0 u8 U4 C) c) X, Y, G. q其他程序段。。。。。
. K) b; V3 W, c  O5 K# l
. ^& g2 r6 T9 ?( y$ c   free(x_d);
0 A9 E8 n3 g# p) Z- t  w3 y* X7 ]" _$ T" M) B. b  ^( A0 B
使用DSP侧单独调试功能,验证动态申请没有问题,  C; v/ t! ?. }4 D& j
  s* i8 v( I  ^' q6 o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  t7 u5 M; V$ v+ D8 T" I
+ h% R8 x1 [9 ^0 n2 A

/ M( n) M/ ^' _( V3 Q+ ~, U
4 O/ \" {" \6 N9 {# R4 c+ h: {; {; W9 W: I8 z
# b, W: {& i( t" W

0 ]" J/ g3 h, p$ u; l: M
5 f- O4 e; }. o4 ?+ M7 v1 w
8 t7 L0 f6 [0 h* Y1 m$ f& l4 j# t; ^. z  m- J# I6 n5 V
  l- i- X. u5 \5 V! z( s$ P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' S$ Y) ?0 }3 ~+ z: S* K4 R
Program.heap = 0;
( t5 u( ]+ o- {+ m. jProgram.argSize = 100;  /* minimum size */
. J- @) r& L/ W7 v+ _Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ |7 N4 s  V1 L. n4 u6 Y! V1 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  e: r3 H0 |8 O3 u3 ^$ Dvar heapMemParams = new HeapMem.Params();
: i$ ]% Q+ @. n4 g+ _heapMemParams.size = 0x4000;
+ z( u9 U9 w# h2 l: a" p- z# o1 H! d0 n  V" d( }  q) ^% w% V
var Memory = xdc.useModule('xdc.runtime.Memory');1 Y; V8 f; P/ X5 R" q' `8 l/ E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 N; J' V. |7 V+ ^) T( B, m
- j( R. b. `- Q, R- q0 \0 X我大约calloc  每次共计大小为5K*16bits,' S- K# i. v' _: W" B2 h
而默认配置才0x4000、需要改大。& K0 O& d1 I7 f; F1 r- u. I1 T9 k
7 p! e: N' D6 T) L- o, Z/ t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 d" x6 {/ u- \; I* [$ p8 J( K0 U0 b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) q$ Y" t# R1 }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' S* P& ^& Y( @3 j7 h

5 k2 s/ o1 Q/ R! ?9 N# P. |- M是不是需要在DSP.CFG中进行配置* Z, c, E5 L3 t6 o  X! T# y
我现在的配置为2 B3 R+ h& S8 {9 ]) S

/ K' m, ^+ V" v3 `1 n$ ]. C/*
# n! z+ ?7 F$ h3 R *  ======== Operating System Configuration ========
7 m/ s& H5 g' e/ r# L */
' z& Y" X4 p, ]/ N* `' X1 `, {, O$ W4 X; N5 C+ V
/* no rts heap */9 }1 s" Q, i9 k, Q4 {% r# L3 T' j
Program.heap = 0;! e9 O5 V: a( k# S9 k$ r) j
Program.argSize = 100;  /* minimum size */
5 l7 |7 y4 {( _. g- DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' g* O$ O+ x! c9 N' G. h" b: A. b6 I/ p, N$ L( W
/* create a default heap */9 I8 u+ T, I% ^3 K' |; h# O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 w4 K0 U( U" L% c* W
var heapMemParams = new HeapMem.Params();
' Q1 ?0 m6 Q0 d6 C: eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' h2 J; V- j: H# a
$ t5 X( {' K' a! _" }
var Memory = xdc.useModule('xdc.runtime.Memory');8 O0 q( {3 u3 j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  [5 l; G+ u+ j, G( J  p* F6 A

$ N! y: P9 I6 s7 v  L! C- O3 ^/* configure System module */5 o, f* u- n; d; h& w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 E$ [9 p+ k0 A/ ?9 f* [5 W  Y7 R0 XSysMin.bufSize = 0x1000;
( F- T, _. _" G" C; e- \& I  U8 qSysMin.flushAtExit = false;
$ [+ B0 Z8 X2 R0 U  ?3 U
2 t' K; p' N% ^2 s* uvar System = xdc.useModule('xdc.runtime.System');& O! ~* [5 \* I/ f% Z# f" N3 B
System.SupportProxy = SysMin;
9 o1 P& c# a5 ^  q$ P5 u
  }- J2 ?: m1 K( q' `. S/* configure SysBios to use the lower half of Timer 1 */
  Y4 V4 ~: ^0 N3 Y3 e9 c! ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% x: e$ G& b1 t+ @. H! s* G
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 s, p, _: s* fTimer.timerSettings[1].master = true;" R/ p4 r) i/ W
Timer.defaultHalf = Timer.Half_LOWER;
, {$ P) r! k7 T& ]$ KClock.timerId = 1;
: X+ p6 S5 Y5 G% v7 ]) V* `- ?. b# F5 r4 P; x: |
+ l0 ]; E0 S: x# G2 Y; t
/*
1 }  w7 r& b% |; S! G# C *  ======== Miscellaneous Configuration ========
5 n7 {/ s$ \5 T% Q5 A) L/ G% z */& }3 o( K: q6 f, }( K
; p/ }( p7 e0 x8 U( w
/* set default diags mask */& t0 [; l" k4 ?/ U: [
var Diags = xdc.useModule('xdc.runtime.Diags');- ^2 U( C, Z1 N' a% z7 d( {
var Defaults = xdc.useModule('xdc.runtime.Defaults');' f; i  q2 S) R2 c. g

. l& Y- G; c4 ^/ bDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 F) \" B8 T. LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 ^5 F( Z5 |8 ?& ]5 [0 m9 C; mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' g% l  k5 i; {# L0 n% J* oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% F# ?, J. B: G# q- M! }Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' |- V6 m. e9 ]$ BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; n- X  D1 x; t4 c0 K( mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ {) Q2 t! V6 p0 @, T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; N3 e- v& B; Q% u! G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 D% W- x6 c8 o7 h% c- {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 w  e" i% j) B7 SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 F0 L5 y& V9 o  T. P' i9 e5 PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 L' A  x2 u8 i% X3 f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* J4 h' y" Z, E: L8 ?- x3 c5 K/ \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# ^" W7 `5 Z/ Y
1 I9 X$ q: _- {6 ~$ f9 c" v/ {" T
/* override diags mask for selected modules */' Y  \7 r$ a8 l, k7 b9 B9 j
xdc.useModule('xdc.runtime.Main');& \- W" Q: d4 V* I( D' {& i
Diags.setMaskMeta(, V, Z6 b9 [! `2 f6 L6 T
    "xdc.runtime.Main",
( Q2 c; L2 _9 G    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 E, G7 q: x, l- c" }
    Diags.RUNTIME_ON5 i+ S% T( {" S" y: @3 ^1 w
);
1 u- [3 t* {$ U$ V$ c- t5 R. \6 x5 p. s- C* A
var Registry = xdc.useModule('xdc.runtime.Registry');
1 ^# \" N# c8 L  URegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ l; X  K& p% MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 i, \; i" L" m2 e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. b; Y; B  f- u" V3 A2 E' zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 w( E& S5 U' x' @. S2 g4 N; b- y$ z# y- J0 Q1 |1 I- [: |3 f, o. n+ ^: l
/* create a logger instance */
# r7 z* j) g4 t* m) O( e/ e& m0 B0 Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* C4 o- G9 u2 E% s- K! }$ `8 {
var loggerBufP = new LoggerBuf.Params();* `" \0 F$ Z. W6 _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: W" M! k- c7 v; P6 i& p7 c* xloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ @% ]8 i6 k- L& y' h% m# p5 D+ F) {/ C# n! |0 ^+ _4 \
var appLogger = LoggerBuf.create(loggerBufP);
2 |) H0 w* }; m( Y7 ^. ^# eappLogger.instance.name = "AppLog_Core1";* k7 a2 {- l* r  ~& D
Defaults.common$.logger = appLogger;) O; Y4 }! C6 W# s. S! x" i1 X
Memory.defaultHeapSize = 0x8192;   
- v, z0 W' g7 F8 ^2 V- MIdle.idleFxns[0] = "&LEDStatus";5 v# K. P. g( @8 @1 i; C
Cache.initSize.l2Size = Cache.L2Size_32K;
. J$ F+ y5 }9 [* G' k9 h& j5 T' [# W3 @
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 16:43 , Processed in 0.042829 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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