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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# p, }) M" O& e0 p' G, X1 W* K( ^3 }0 Z) U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- T9 W  w7 ^! i. }  y* d$ c
( f( V8 p3 I7 L# ^' j其他程序段。。。。。; E" [/ G5 d" n: G0 D  N( {
) _8 V' U$ r$ P6 u, W/ i
   free(x_d);, H! g$ ?( q1 r2 X: F  E

' q7 x  J3 v% V# W使用DSP侧单独调试功能,验证动态申请没有问题,, @, B% @, C) q

* m' g1 @4 O' |' T% T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' r( _/ A' c* }

7 v( _, M& U2 l+ B, F' [$ C$ b9 P
: R7 U" d8 d% ]2 t: ~

8 m- v" n/ |/ {( X2 ~  Q) m% V" `4 v4 Q' a
7 I% S* p6 A! l) T& i4 F
5 }$ h( a: z5 P' c) v; V

% b$ v/ F6 [2 W, g% N
( {  _8 p# g' g# d* ~4 E4 J  h' ^$ k4 P$ e7 }8 `
分享到:  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 */
. }* O0 d7 p3 w! C# a( F$ wProgram.heap = 0;! A2 b5 v" h3 e
Program.argSize = 100;  /* minimum size */
5 c; s* W& l, v1 H. m& t4 bProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */2 ^' F- d4 E+ Q: p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! i$ G+ q  e( h+ P
var heapMemParams = new HeapMem.Params();. H% r; H: R/ @; R9 Y
heapMemParams.size = 0x4000;
/ e( \4 l' ]$ K5 v/ O/ I" o
: h6 D& A( H& N7 {5 b1 k, Ivar Memory = xdc.useModule('xdc.runtime.Memory');
5 g4 U+ _+ z# D+ {4 ?0 L" W/ vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) ^7 Z5 n1 M) P. G( B! t6 B7 C; s

0 `: k; O+ u. j6 B. N% i- e8 ^我大约calloc  每次共计大小为5K*16bits,4 [( x3 z  L8 G3 J
而默认配置才0x4000、需要改大。! g$ z' H# Q6 f4 n" p

6 A! c  N' Y0 u9 J- H1 E  I
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
$ k+ e! U2 M$ ], v: `, c我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% \( x* f% G9 Q! G& j- k0 `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' C6 ]# j+ _# ^( s6 Q) i
) @8 V, n1 [+ u4 X! T6 f( E( _
是不是需要在DSP.CFG中进行配置- ?! _; b; u- \. r/ ^/ {
我现在的配置为
4 F' W4 _& s/ H2 O7 f& ?
3 L# a" G& L% m0 z+ G4 ^/*6 O* B; k4 B8 J& o: Y" E/ a
*  ======== Operating System Configuration ========. l* W& d/ @9 m/ C8 z
*/; G" M; e$ V( F9 E: @0 z

% ~- ?5 `3 O9 H" J/* no rts heap */
0 ~: `3 i: q/ lProgram.heap = 0;5 E  c3 W' t& Z) h5 t
Program.argSize = 100;  /* minimum size */
7 T, a$ m7 @: M* hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; X7 |5 Y( l1 h/ J3 y4 n' t3 Q( J9 F0 m9 u" K0 u3 e
/* create a default heap */6 r3 {+ o1 J0 y# I% B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- n3 l; E, @- o! f
var heapMemParams = new HeapMem.Params();6 M0 w) x* u. d, t& v" k" `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ g- r" a. z- L1 l) H. ?" F
3 J0 C; m$ ^8 L# v* c. D5 O. W4 u
var Memory = xdc.useModule('xdc.runtime.Memory');
+ {7 u0 p7 G* @2 b9 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, ^  X) F7 f7 f
7 d+ V+ X4 h0 L$ V; P4 V# p2 X7 t/* configure System module */
* W% g1 K2 q- {1 `7 L/ z( N9 Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 V* `& a2 C0 X) ^
SysMin.bufSize = 0x1000;) z! o. Q9 G& ?. o; l
SysMin.flushAtExit = false;
& |* Y0 x8 }) v0 D" o' h/ T; B" C. J( E8 c0 h5 q# p! C
var System = xdc.useModule('xdc.runtime.System');( Z: O: w, @) C( p# Q
System.SupportProxy = SysMin;- r$ h! U' M. Y- t& l; @: M% P2 K

+ K; [9 g' o; e/* configure SysBios to use the lower half of Timer 1 */: w* w6 T: \7 J4 Q$ y  R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* q) Z2 \1 K. g+ y3 _6 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- @# r3 G$ R7 x' K7 x* `$ k7 z. K
Timer.timerSettings[1].master = true;
: I3 Q7 r$ S  C( L: t/ RTimer.defaultHalf = Timer.Half_LOWER;2 i( F7 T# i: A
Clock.timerId = 1;
, @3 K$ T9 {/ ^: J8 k
5 P; ~9 R" G& T4 O$ v3 {# v0 b  A% J) V3 P+ V$ b& a
/*7 S0 H% Q8 W# w9 B" H
*  ======== Miscellaneous Configuration ========
) n4 j7 N# `* @! R3 U7 c */7 h+ T/ i! g3 x$ S' S/ S* @0 W+ Y

6 U: _. I' u. ]5 W+ F/* set default diags mask */
+ q# F- ]5 E+ O( }. a3 l: D* E1 D9 @var Diags = xdc.useModule('xdc.runtime.Diags');2 o8 [! w* h  e' e% l9 h1 d
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 {* E1 {& p/ Y9 E& @5 `, c6 T
' t; n( R# u2 b4 W6 xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 e9 j1 I9 t$ M: uDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* l7 ^1 R' l# d! Q9 s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 w3 @! y, F& X: G5 n8 m8 _$ TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* Z9 Q3 V" i) M8 J% x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# J, i8 _* H3 g! S$ o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 N  c3 N3 [1 e; A4 o- q, U; i- i9 {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  e& F3 s  M# I! YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 B4 B! M" Z* x7 fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; \  ]6 O1 C, h0 o: O# zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! I& _& \3 W8 g$ i( KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 l. P- Y' g$ A/ x  c" J% E* F" T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 ]1 F# H! i$ d$ h1 P& a* s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 p" X2 E; c8 [! v2 L( WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 C# y/ P- ]( I
* ]: Y* s3 h7 F6 R/ G$ t
/* override diags mask for selected modules */5 L) |/ s- R9 h  S# C, S( A
xdc.useModule('xdc.runtime.Main');; j, e/ I0 [  D' `9 T3 C2 B' I. ]
Diags.setMaskMeta(' A6 W. ]( Q7 Y/ O
    "xdc.runtime.Main",
1 `  C% Z0 r$ D2 u4 F& F* R% t    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 Y# h5 b* Q! F5 w2 s
    Diags.RUNTIME_ON4 I/ P: f, K+ v4 N) X, [
);
0 e) {& @& p# \/ ^
4 d, G( ]2 |& o, fvar Registry = xdc.useModule('xdc.runtime.Registry');& y/ x! P' |$ F4 p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( |) c0 o5 \% c9 ~# a, b/ n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) c, _  l/ T$ [7 m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 M4 R0 L5 h4 r* |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" B/ \. A& B# s3 G; Z9 \) o6 V2 X# d5 R% i6 q9 o7 N- _- w
/* create a logger instance */
. Y- l  p2 |5 I6 r( ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" B5 S5 t! p$ V: }+ yvar loggerBufP = new LoggerBuf.Params();
/ q- |: y+ |7 n7 JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! W6 j/ s3 d% n- k3 o( v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 F8 t, T, F! n% |+ |% R$ D, |9 }8 @* X, \: Y6 q$ e
var appLogger = LoggerBuf.create(loggerBufP);/ i$ j; E' F, y( [# A6 ^, y
appLogger.instance.name = "AppLog_Core1";# w! z/ E8 l7 w& P$ O( j) F2 h9 M
Defaults.common$.logger = appLogger;* u* f$ x; v) ~4 r1 _3 J
Memory.defaultHeapSize = 0x8192;   
5 ~+ U% o$ O' b. X" C0 I9 m) j: O- ^Idle.idleFxns[0] = "&LEDStatus";
. F& d$ I( z$ R/ K1 v) u5 {Cache.initSize.l2Size = Cache.L2Size_32K;
( S* r6 h9 i8 j# ~/ D5 l+ o. g8 p+ P. W4 u) ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 01:10 , Processed in 0.045172 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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