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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  ?* z$ q; R  v

  @1 s7 n1 H+ S" Y5 c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( u( y& U/ r8 V5 g" U  l, D7 D+ s4 `( l% U5 W
其他程序段。。。。。
+ _. J$ J9 q- i0 a; _; M 2 B1 Z6 C/ I: _: c7 o: @
   free(x_d);
- Z  n, J2 y( d) {5 L, R! k( c5 Y! `- E* x' y
使用DSP侧单独调试功能,验证动态申请没有问题,
4 H  N0 p& B: ?* M8 A3 E0 A& X% s  K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ ~! ~+ Y% h( s/ J

% X" f' O6 J' R3 ^# S& c
+ Q7 g! l/ ~, {2 D
; D) Y& `8 ^5 @& G9 y- M: t! J- a, w, g! W; M# Y! Y/ |/ {
! s" B6 ]& r# x1 F6 H

( u, W; M7 Y' u
/ @! `' R* }1 j& B4 {& _- `; z, m9 p: ?& s
+ L0 s$ ]& ^$ v+ K- V+ V, C. _# n* `

1 T% M! C" [# n& E0 @9 Y' u+ s
分享到:  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 */
0 @, P2 R8 E5 f- f6 ]: AProgram.heap = 0;
6 p! B5 {; G: |Program.argSize = 100;  /* minimum size */
. X1 S0 @6 G4 {2 O0 s" T6 C7 }" x3 NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 Y& ~9 K! _% ^1 F3 I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* k) C6 x1 o, H5 o/ U* g( F8 ]0 b. F
var heapMemParams = new HeapMem.Params();9 F+ @2 Q" B, i: _
heapMemParams.size = 0x4000;0 b! p, q, E7 s# z. T
4 x! w" z) m" u
var Memory = xdc.useModule('xdc.runtime.Memory');, ^# I$ `5 a7 m4 c/ d+ a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ H$ a' E% E3 j; {* c9 Y+ A6 r3 M
我大约calloc  每次共计大小为5K*16bits,0 h+ t# h3 y7 L( U
而默认配置才0x4000、需要改大。
5 u3 n4 ~& a& v5 N5 g, v- [% I. B9 |. V$ @9 e& S# e
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明6 d- m! @' S: E, l$ T( F5 Z, h% X9 D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' B  {  X) a3 W& K  \" @& E% R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 u: Q( q% e3 ~, s6 G, D% \
, }8 H; u0 s  W/ m
是不是需要在DSP.CFG中进行配置; H1 I1 Q% k  k+ y
我现在的配置为
% s8 ~, O0 C3 C' S4 H. t' |1 \/ m, ]) ]2 P
/*7 ^) w& d8 V2 t7 Y) U
*  ======== Operating System Configuration ========
0 ^% n: p, q6 \, H */" [1 O, z& d! S$ [2 b7 Q6 z
0 G& P7 d" Z3 e) m% U# r5 d0 i5 w* K. Z( t
/* no rts heap */
3 e  {. B" j- D+ a1 d2 z6 e+ S- Z, `Program.heap = 0;
: n3 k) A- O( LProgram.argSize = 100;  /* minimum size */" q! Q- k  W* W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 T! t+ o) l0 g& n* p6 z; Z

1 ^" s! f2 Q. p# V$ }& J% p/* create a default heap *// N0 L/ h+ N2 v7 m% B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' \/ I2 ?! S$ L4 D) W4 T
var heapMemParams = new HeapMem.Params();
0 t( M' Z' C! |$ x/ k6 theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% ?/ y; g  t2 ^3 M. D& A9 G' K# s  B) ]
var Memory = xdc.useModule('xdc.runtime.Memory');. v4 D+ L. h. u+ k4 S* B, W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( [# s" T1 x# p6 k+ X' G: a5 z- h7 Q2 k# c3 K2 }: M
/* configure System module */
5 N- U0 r  ^0 O9 F. s1 v; hvar SysMin = xdc.useModule('xdc.runtime.SysMin');2 P5 y: ?. w( R5 L+ K" T
SysMin.bufSize = 0x1000;
, C/ r/ [$ W, gSysMin.flushAtExit = false;* c! F4 H. P  o
6 s9 F2 ^' t  T
var System = xdc.useModule('xdc.runtime.System');
* R. _7 m( u& B9 b- n7 l: bSystem.SupportProxy = SysMin;' g6 [% o) C" F- l* \) D* W# E
/ c- D7 i- Z$ y6 Z- o9 E/ a- D% g1 y
/* configure SysBios to use the lower half of Timer 1 */: X3 E$ \& n) S/ R2 O, P# n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 ?: Q% H" b$ P, f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) s2 L/ F. `3 v# c. pTimer.timerSettings[1].master = true;
4 ]+ t8 V, _7 s; F- c4 T8 QTimer.defaultHalf = Timer.Half_LOWER;
9 J' z: U( ^! a# s3 S- X" _0 K- bClock.timerId = 1;
' M% \* Q/ o8 R" U  f* f6 F5 N% T4 I0 |

" f$ O( t& ?( @. Z: z/*
1 i& b, W4 G, f9 K" q! e# ^ *  ======== Miscellaneous Configuration ========) F% f8 \2 K0 T
*/+ t$ Y0 p& c" d( s
, [+ p7 p4 t4 l6 l3 g0 T
/* set default diags mask */
( I8 m, m1 f2 I4 T+ U* {5 lvar Diags = xdc.useModule('xdc.runtime.Diags');9 V8 ]  x: f3 M- k# K
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 v9 U1 Y* {. U/ w9 \& h

  e, Y7 I' P$ a% dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( z; z6 J* {! ~+ Y' |; m4 Q5 o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; W9 {$ `0 i0 G" J# k$ WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: A* |0 V5 H3 x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# _# _$ }4 u/ X) IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 B+ N3 p( O0 F6 Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ u) H2 m2 T4 t$ D( o: m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; g  c  Q0 f* S4 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 [4 s- u7 L& c) V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% b6 \5 A  v) ]' W2 X/ G1 P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 P$ r. {$ \, d! ~' w6 m; i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 J/ W- \; x; Z" Z& s8 u: KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 ?8 d" _# y" g' o! f5 p' V+ iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, v2 `( V6 M" n/ pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! G; E% K9 e6 A4 N
& P. T0 X, }8 z1 C1 ~: Y4 l
/* override diags mask for selected modules */5 Q5 Y/ w- w; ]" y, z
xdc.useModule('xdc.runtime.Main');- P" v2 V) {! a" V
Diags.setMaskMeta(
; u1 i) M: }$ a4 e; ?% b    "xdc.runtime.Main",5 p7 {+ C* }0 p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  [& {  U* E* ^& O  Q  ?- h
    Diags.RUNTIME_ON
+ m/ k. ^3 O6 q( ]);0 `5 ^6 ]: }/ V

" ?# t+ H$ ]. U( _- D, n. g  vvar Registry = xdc.useModule('xdc.runtime.Registry');
, X$ ~; y; @/ I, t. o; w$ lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( X" V& {) o0 L! PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% s5 g# G& C# r- b( b' i2 TRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. g. O6 N+ }! u: @+ O8 c& v) P' `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- f4 ]: q. |: f; s2 E' Y
: I5 ~4 V: ?$ a
/* create a logger instance */
8 l' k0 z8 z- E0 G* jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. j9 X' J$ @: M2 i4 \, e% N8 s, H; C
var loggerBufP = new LoggerBuf.Params();/ W2 i- Q( |" O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& v" ]3 ^- i9 c! i$ @" Y' Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 [. V6 o2 l  P; K
0 [, ~2 D8 X) }var appLogger = LoggerBuf.create(loggerBufP);
) f9 t5 D; `6 ^3 o+ h6 NappLogger.instance.name = "AppLog_Core1";" P8 a2 |% j: t; U# J
Defaults.common$.logger = appLogger;
6 q8 B$ I$ ?: J0 l' J9 q+ XMemory.defaultHeapSize = 0x8192;    2 }5 ^& B9 J- n$ b
Idle.idleFxns[0] = "&LEDStatus";
" `9 J8 T' c: B; WCache.initSize.l2Size = Cache.L2Size_32K;
9 k* J  |9 Z( \. C4 u/ O
% A# ~: r( Y# O
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 16:55 , Processed in 0.044764 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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