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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; I! m% [) c! D% c
9 ?$ ]4 F1 A+ h  J) H! {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 t& f% n( T3 \' p$ S

( h$ W( y1 Y3 Z4 i9 Z. f其他程序段。。。。。+ f7 R3 a, P" E/ r+ T
! U$ r" P) |, O; q6 I$ ^
   free(x_d);1 N6 h& ^7 r& A; j- e8 X

, k- T3 c: L$ N1 t使用DSP侧单独调试功能,验证动态申请没有问题,
  x- p' t) g  r
, ]+ p9 r) A9 j7 m8 Q6 Z( |+ e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& }1 E, R6 J7 N. s6 e# c
$ D8 z- J1 z( H$ m( C( z0 o8 w3 a; m

- l6 i% x& @) r3 K* T. X; w) u& y  K) j$ Z. |. e

9 x" G7 R7 ?, Z. e+ \- C; N" J* Y' X! Y* ^& z3 U) U
& X) U0 {9 g; N

0 l' J1 s1 h- d' [% J& r# C- E( D" r( T$ m- R* }

* j# Y& a& c; L& N) u1 _) _9 N2 E% R& O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ m, {+ C  N( R) t# l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" ~, R7 s2 t! }/ O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 h  T4 F+ o' p' u  g

3 [; c, a  M/ L1 g! X! M$ p是不是需要在DSP.CFG中进行配置
+ o4 S  Z% h1 O6 q6 Q& D# Z我现在的配置为1 U6 ]  N; l+ @, r6 B0 y
4 L5 v: t, O# X" ]) }7 }3 y
/*: J  |, R5 q7 I; ]$ U! ]' O& }
*  ======== Operating System Configuration ========" P5 P" i3 D4 e
*/
& N. N6 b4 Y+ x! T$ j) u) l+ X* c$ a9 {9 n( S. {
/* no rts heap */
- a7 A6 g3 G4 A1 k& uProgram.heap = 0;
! {1 p- n, z2 m* CProgram.argSize = 100;  /* minimum size */
& K# ?+ M9 g/ U2 x' j& iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 q+ S+ n% c4 l
) X5 G( P: K8 c8 |9 I; p/* create a default heap */: Z* B1 ~" E# p2 i7 v/ I" D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 o$ I; a3 q. ]# T" i$ R& }+ k* Tvar heapMemParams = new HeapMem.Params();
& V6 i' x; N% A  |' NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( U: j( U& _+ z/ x
8 D' A# d- H: d6 `7 U% w
var Memory = xdc.useModule('xdc.runtime.Memory');
2 i7 b. e2 c: u- g1 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) s6 Q; D7 j8 D6 i: X! m
; W5 i+ w" ?4 c; x0 V( w; }/* configure System module */9 _7 M1 H0 D+ v% ~7 r5 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ S# S6 Q0 k8 I/ q* H# f8 r
SysMin.bufSize = 0x1000;& D+ b8 O' M9 P  t  H  E
SysMin.flushAtExit = false;
6 A* ~: e0 |# U' n$ ^! [
, G) H4 }" [/ @2 u" r+ }0 Cvar System = xdc.useModule('xdc.runtime.System');
; ]* _/ Q, Q# _: G$ Q; \8 P. B" YSystem.SupportProxy = SysMin;
8 {# j4 R# I- s3 S
7 q' ]" M- w' R! l. ~0 X/* configure SysBios to use the lower half of Timer 1 */
; q! D, f$ R1 Y5 `! r8 ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 M2 _) f8 r' h" }var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  W7 R  s6 Q3 j% o. O. j& ~5 FTimer.timerSettings[1].master = true;
+ s) D) @& }, [$ `0 T) v5 I6 [Timer.defaultHalf = Timer.Half_LOWER;2 v; P1 H4 V4 U1 {1 K. n$ ]$ j
Clock.timerId = 1;
6 u0 g' x( j3 j/ T% z4 ]8 Z
) E) O* u0 y" M! k& F
3 U6 u9 @" g, K0 r6 ^7 E" h/*
" H! E; `! J( y$ F *  ======== Miscellaneous Configuration ========
/ g9 I, T& z1 u8 Q3 ]8 h7 O */
( f9 R+ C$ o5 p( L/ D
5 `$ X; m) D1 q1 w, c# s/* set default diags mask */' L# g  V& Y* Q9 h
var Diags = xdc.useModule('xdc.runtime.Diags');% S) K: `( u: b
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ {7 |4 W- b4 K$ [1 ?3 l4 U

  _- y* J) Q1 n. v8 c1 k/ |Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 ]. G7 x: M0 M0 `; F: C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ ^& B4 L" j8 [4 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: j. V4 [- ]/ j0 y; q9 UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( Q. g2 V" F* P6 G$ ^% e- p6 ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 {5 J" ?/ s% w- X( V$ _  q8 mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; y5 `+ J0 m% v, E+ S" eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 o4 Q$ j/ l- U- M7 G  p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( W5 J0 I- u- Q3 q; f; y% ]4 Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 s# q! H& \* ?* q8 C( }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 y% K/ D/ I$ D+ ?) H% x
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! T' @; z0 y% x. p8 R- M3 zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 k/ y" E. Q3 PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% y% l5 @0 d; p) U, Q' vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' v" u+ W3 `7 T8 |3 K& I0 Q2 j4 B! l  G. I0 N. t$ F2 [9 k
/* override diags mask for selected modules */% N* J5 Y) p( d+ ?  A+ {, w5 V3 S
xdc.useModule('xdc.runtime.Main');5 o* j- c" Z" ], g. [6 ?! w
Diags.setMaskMeta(
& x( f8 T- o' ]+ l+ t+ ~) r( h    "xdc.runtime.Main",
; S6 Q" i& q5 A  v4 H, p/ T    Diags.ENTRY | Diags.EXIT | Diags.INFO,- O  r6 J! X9 o3 P9 [! u8 h
    Diags.RUNTIME_ON  t6 o( r8 H" ^# K6 Y
);
6 m% @  ^0 h  C$ T, F' N: F* p
3 @/ E0 Z. J/ p3 |6 ^5 Wvar Registry = xdc.useModule('xdc.runtime.Registry');
6 E  n9 X3 C) q2 M* _. |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 R. U& c& u* H; [" _; ], {, B% |" f$ X/ CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 d2 i! ]  {; n9 mRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 _. ]3 p9 h( O1 P5 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 V$ x# m) \# Z/ B$ N% G) r' U6 w3 K7 c$ V# v. L6 G
/* create a logger instance */
5 j$ j! G' d& A* d- ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 h. O! [; X: @8 u( W) N/ ]! Q
var loggerBufP = new LoggerBuf.Params();
9 c4 z. f) K% t. y5 dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" l! b0 F9 C$ y, N+ i) a. z5 hloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 z' s( C, _- U1 l
; s0 {9 s# c3 J: b2 Q9 t
var appLogger = LoggerBuf.create(loggerBufP);: w& g. O( k0 c5 Z  G3 H! _
appLogger.instance.name = "AppLog_Core1";
+ Z! `/ `% _- r* uDefaults.common$.logger = appLogger;
9 Q+ X1 _9 h0 F6 Z" s4 z* ZMemory.defaultHeapSize = 0x8192;   
7 v+ z: z- C' n1 f2 b- k) TIdle.idleFxns[0] = "&LEDStatus";
' |$ v# E9 H/ M* SCache.initSize.l2Size = Cache.L2Size_32K;
6 M& [7 E" x7 ?: @4 N: I& {
1 p' c* T" l3 w7 F1 I. z9 G
回复 支持 反对

使用道具 举报

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 */2 H4 t" {5 S7 `% Y0 B* Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: ^& A! {0 i! A3 o
var heapMemParams = new HeapMem.Params();7 l6 h# O4 G" j9 |( c! Q
heapMemParams.size = 0x4000;
1 t4 H6 \: M, |* ~- I2 ~9 x% y7 C
) w% E( z1 ]  D, d" r( Jvar Memory = xdc.useModule('xdc.runtime.Memory');0 S* M0 A9 x9 i# S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" U) j! ?" B; t9 ^" ]- F+ `
: \/ C7 L- A% B: b
我大约calloc  每次共计大小为5K*16bits,
) q! S( w$ I6 r6 D+ x% L4 P而默认配置才0x4000、需要改大。; u! G, w2 ^0 r5 j% Z/ i
% |9 w& ?, D. a* t0 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 S+ x) w) i$ w6 a  ?8 j4 eProgram.heap = 0;' p3 ^7 P- @) K% E4 f7 L# l
Program.argSize = 100;  /* minimum size */
8 v; V- o3 M% t8 e, h' XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 17:05 , Processed in 0.045393 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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